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

我有一个带有嵌套对象的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(jsonData); ... public class Menu { public int id { get; set; } public string name { get; set; } public Menu[] children { get; set; } } 

我得到的错误是“不支持类型’菜单’反序列化矩阵”。 我很感激有关如何声明自定义对象的任何帮助。

干杯。

您的根对象是一个2d 锯齿状的对象数组 。 属性"children"也是2d锯齿状数组。 因此,您的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(jsonData); 

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

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

然后

 var objects = serializer.Deserialize>>(jsonData); 

可能问题是实际数据是一个数组,但你告诉它只期望一个菜单?