【问题标题】:Deserializing JSON Array with JSON.net使用 JSON.net 反序列化 JSON 数组
【发布时间】:2015-05-27 13:39:59
【问题描述】:

我有一些来自 EPA 的 UV Index API 的 JSON。 json 是一个数组,其中包含单独的元素。 JSON 示例:

[
{
"ORDER": 1,
"ZIP": 19021,
"DATE_TIME": "MAY/27/2015 07 AM",
"UV_VALUE": 0
},
{
"ORDER": 2,
"ZIP": 19021,
"DATE_TIME": "MAY/27/2015 08 AM",
"UV_VALUE": 1
},
{
"ORDER": 3,
"ZIP": 19021,
"DATE_TIME": "MAY/27/2015 09 AM",
"UV_VALUE": 1
},
{
"ORDER": 4,
"ZIP": 19021,
"DATE_TIME": "MAY/27/2015 10 AM",
"UV_VALUE": 2
},
{
"ORDER": 5,
"ZIP": 19021,
"DATE_TIME": "MAY/27/2015 11 AM",
"UV_VALUE": 3
},
{
"ORDER": 6,
"ZIP": 19021,
"DATE_TIME": "MAY/27/2015 12 PM",
"UV_VALUE": 7
},
{
"ORDER": 7,
"ZIP": 19021,
"DATE_TIME": "MAY/27/2015 01 PM",
"UV_VALUE": 6
},
{
"ORDER": 8,
"ZIP": 19021,
"DATE_TIME": "MAY/27/2015 02 PM",
"UV_VALUE": 6
},
{
"ORDER": 9,
"ZIP": 19021,
"DATE_TIME": "MAY/27/2015 03 PM",
"UV_VALUE": 7
},
{
"ORDER": 10,
"ZIP": 19021,
"DATE_TIME": "MAY/27/2015 04 PM",
"UV_VALUE": 5
},
{
"ORDER": 11,
"ZIP": 19021,
"DATE_TIME": "MAY/27/2015 05 PM",
"UV_VALUE": 3
},
{
"ORDER": 12,
"ZIP": 19021,
"DATE_TIME": "MAY/27/2015 06 PM",
"UV_VALUE": 1
},
{
"ORDER": 13,
"ZIP": 19021,
"DATE_TIME": "MAY/27/2015 07 PM",
"UV_VALUE": 0
},
{
"ORDER": 14,
"ZIP": 19021,
"DATE_TIME": "MAY/27/2015 08 PM",
"UV_VALUE": 0
},
{
"ORDER": 15,
"ZIP": 19021,
"DATE_TIME": "MAY/27/2015 09 PM",
"UV_VALUE": 0
},
{
"ORDER": 16,
"ZIP": 19021,
"DATE_TIME": "MAY/27/2015 10 PM",
"UV_VALUE": 0
},
{
"ORDER": 17,
"ZIP": 19021,
"DATE_TIME": "MAY/27/2015 11 PM",
"UV_VALUE": 0
},
{
"ORDER": 18,
"ZIP": 19021,
"DATE_TIME": "MAY/27/2015 12 AM",
"UV_VALUE": 0
},
{
"ORDER": 19,
"ZIP": 19021,
"DATE_TIME": "MAY/27/2015 01 AM",
"UV_VALUE": 0
},
{
"ORDER": 20,
"ZIP": 19021,
"DATE_TIME": "MAY/27/2015 02 AM",
"UV_VALUE": 0
},
{
"ORDER": 21,
"ZIP": 19021,
"DATE_TIME": "MAY/27/2015 03 AM",
"UV_VALUE": 0
}
]

为了解析它,我假设我可以使用 foreach 语句来检索每个元素的 UV 索引属性的值。 b.Result就是上面的JSON。

JObject EPAData = JObject.Parse(b.Result);
foreach (var UVIndex in EPAData.Root)
{
    string uv = (string)UVIndex["UV_VALUE"];
    //Do whatever I want with the UV index
};

但是,这似乎不起作用。我收到一条错误消息:

应用程序出错:从 JsonReader 读取 JObject 时出错。当前的 JsonReader 项不是对象:StartArray。路径'',第 1 行, 位置 1。

【问题讨论】:

    标签: c# json windows-phone-8 windows-phone json.net


    【解决方案1】:

    您的 JSON 代表一个数组,而不是一个对象,因此请改用 JArray.Parse

    JArray EPAData = JArray.Parse(b.Result);
    
    foreach (var UVIndex in EPAData)
    {
        Console.WriteLine (UVIndex["UV_VALUE"]); // 0, 1, 1, etc.
    }
    

    示例: https://dotnetfiddle.net/G4PkSf

    【讨论】:

      【解决方案2】:

      如果你只想得到 Uv_VALUE 的值,这很简单,你可以使用这个代码:

              var json = JArray.Parse(s);
              var list_items = json.Children<JObject>().Properties().Where(p => p.Name == "UV_VALUE").ToList();
              list_items.ForEach(c=>Console.WriteLine(c.Name+" "+c.Value));
      

      【讨论】:

        猜你喜欢
        • 2013-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多