如何反序列化此JSON数组

时间:2016-06-16 13:57:37

标签: c# asp.net json.net

JSON就像这样(伪代码):

[{one-off intro object}, [{object},{object},{object}]]

所以它是一个数组,其中数组中的第一个东西是我不感兴趣的对象,第二个是充满我实际想要反序列化的对象的另一个数组。

如何使用JSON.NET执行此操作?

3 个答案:

答案 0 :(得分:2)

您可以使用Json.Net的LINQ-to-JSON API来完成这项工作。

为了举例,我们假设您的JSON如下所示:

[
  {
    "blah": "nothing interesting here"
  },
  [
    {
      "id": 1,
      "name": "foo",
      "desc": "description of foo"
    },
    {
      "id": 2,
      "name": "bar",
      "desc": "blurb about bar"
    },
    {
      "id": 3,
      "name": "baz",
      "desc": "buzz about baz"
    }
  ]
]

首先,定义一个类来保存您感兴趣的内部数组中的项目。

public class Item
{
    [JsonProperty("id")]
    public int Id { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("desc")]
    public string Description { get; set; }
}

现在,您需要做的就是将JSON解析为JArray,然后从中获取子数组并使用ToObject()将其转换为项目列表。

JArray ja = JArray.Parse(json);
List<Item> list = ja[1].ToObject<List<Item>>();

从那里,您可以像往常一样使用项目列表。

小提琴:https://dotnetfiddle.net/CaFzux

答案 1 :(得分:0)

您可以通过强类型转换或动态获取第二组对象,以下是动态执行此操作的示例:

dynamic jsonArray = JArray.Parse(json);         
dynamic targetJsonObjects = jsonArray[1];

答案 2 :(得分:0)

您是否尝试过这样简单的模型?

public class RootObject
{
    public object IntroObject { get; set; }
    public List<Item> Items { get; set; }
}

public class Item
{
    public string WhatEverPropertyYouNeed{ get; set; }
}