【问题标题】:Deserialize nested JSON array in C#在 C# 中反序列化嵌套的 JSON 数组
【发布时间】:2016-04-15 23:58:06
【问题描述】:

我有一个带有嵌套对象的 JSON 数组,代表一个菜单,如下所示:

[
    [
      {
       "name": "Item 1",
       "id": 1
      },
      {
       "name": "Item 2",
       "id": 2,
       "children": [
        [
         {
          "name": "Item 21",
          "id": 21
         }
        ]
       ]
      },
      {
       "name": "Item 3",
       "id": 3,
       "children": [
        [
         {
          "name": "Item 31",
          "id": 31,
          "children": [
           [
            {
             "name": "Item 311",
             "id": 311
            },
            {
             "name": "Item 312",
             "id": 312
            }
           ]
          ]
         },
         {
          "name": "Item 32",
          "id": 32
         },
...

我想使用 JavaScriptSerializer 反序列化它。我有一些代码如下所示,但不工作。

var serializer = new JavaScriptSerializer();
var objects = serializer.Deserialize<Menu>(jsonData); 
...


public class Menu
    {
        public int id { get; set; }
        public string name { get; set; }
        public Menu[] children { get; set; }
    }

我得到的错误是“不支持'Menu' 类型来反序列化矩阵”。 对于如何声明自定义对象,我将不胜感激。

干杯。

【问题讨论】:

  • 菜单是一个html列表,然后序列化为JSON数组

标签: c# asp.net json json-deserialization javascriptserializer


【解决方案1】:

您的根对象是对象的 2d jagged array。属性"children" 也是二维锯齿状数组。因此,您的 Menu 课程必须是:

public class Menu
{
    public int id { get; set; }
    public string name { get; set; }
    public Menu [][] children { get; set; }
}

并按如下方式反序列化您的 JSON:

var serializer = new JavaScriptSerializer();
var objects = serializer.Deserialize<Menu [][]>(jsonData);

或者,如果您更喜欢列表而不是数组,请执行以下操作:

public class Menu
{
    public int id { get; set; }
    public string name { get; set; }
    public List<List<Menu>> children { get; set; }
}

然后

var objects = serializer.Deserialize<List<List<Menu>>>(jsonData);

【讨论】:

    【解决方案2】:

    问题可能是实际数据是一个数组,但您告诉它只需要一个菜单​​吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-22
      • 1970-01-01
      • 2019-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多