在C#中反序列化嵌套的JSON数组

Car*_*los 2 c# asp.net json javascriptserializer json-deserialization

我有一个带有嵌套对象的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
         },
...
Run Code Online (Sandbox Code Playgroud)

我想使用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; }
    }
Run Code Online (Sandbox Code Playgroud)

我得到的错误是"不支持类型'菜单'反序列化矩阵".我将非常感谢有关如何声明自定义对象的任何帮助.

干杯.

dbc*_*dbc 5

您的根对象是一个2d 锯齿状的对象数组.属性"children"也是2d锯齿状数组.因此,您的Menu课程需要:

public class Menu
{
    public int id { get; set; }
    public string name { get; set; }
    public Menu [][] children { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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

var serializer = new JavaScriptSerializer();
var objects = serializer.Deserialize<Menu [][]>(jsonData);
Run Code Online (Sandbox Code Playgroud)

或者,如果您更喜欢列表到数组,请执行:

public class Menu
{
    public int id { get; set; }
    public string name { get; set; }
    public List<List<Menu>> children { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后

var objects = serializer.Deserialize<List<List<Menu>>>(jsonData);
Run Code Online (Sandbox Code Playgroud)