在 Umbraco 剃须刀中解析 Json

Parse Json in Umbraco razor

我如何解析这个 Json:

[{
"value": "",
"date": {
  "value": "17/04/2015"
},
"hour": {
  "value": "21:00"
},
"venue": {
  "value": "some stadium."
}},  {
"value": "",
"date": {
  "value": "18/04/2015"
},
"hour": {
  "value": "20:30"
},
"venue": {
  "value": "some stadium"
}}]

我试过这段代码:

var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();

foreach (var item in serializer.Serialize(item.dates))
{
   @* item == "34 ''" *@
}

但它的 return 字符串“34 ''” 而不是我想要的。

有人可以帮助我了解我错过了什么吗? 谢谢

您应该使用 DeserializeObject-方法而不是 Serialize-方法。

它returns一个包含Dictionary<string, object>-元素(您的数据)的对象[]

要从数组中获取值,将当前 Item 转换为 Dictonary<string, object>(表示 json 对象)并使用索引器访问该值。

示例:

var v = new JavaScriptSerializer();
        var arr = (object[]) v.DeserializeObject(File.ReadAllText("json.txt"));
for (var i = 0; i < arr.Length; i++)
{
    Console.WriteLine(((Dictionary<string, object>)arr[i])["value"]);
}

示例 2 - 访问日期对象内部的值:

var v = new JavaScriptSerializer();
var arr = (object[])v.DeserializeObject(File.ReadAllText("json.txt"));
for (var i = 0; i < arr.Length; i++)
{
    // The current object
    var c = (Dictionary<string, object>) arr[i];
    // Getting the date object
    var date = (Dictionary<string, object>) c["date"];
    // Printing the value inside of the date object
    Console.WriteLine(date["value"]);

    // OUTPUT:
    // 17/04/2015
    // 18/04/2015
}