在 C# 中反序列化嵌套的 JSON 数组
Deserialize nested JSON array in C#
我有一个包含嵌套对象的 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; }
}
我得到的错误是 "The type 'Menu' is not supported to deserialize a matrix"。
对于如何声明自定义对象的任何帮助,我将不胜感激。
干杯。
问题可能是实际数据是一个数组,但您告诉它只需要一个菜单吗?
您的根对象是一个二维 jagged array 对象。属性 "children"
也是二维锯齿状数组。因此你的 Menu
class 需要是:
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);
我有一个包含嵌套对象的 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; }
}
我得到的错误是 "The type 'Menu' is not supported to deserialize a matrix"。 对于如何声明自定义对象的任何帮助,我将不胜感激。
干杯。
问题可能是实际数据是一个数组,但您告诉它只需要一个菜单吗?
您的根对象是一个二维 jagged array 对象。属性 "children"
也是二维锯齿状数组。因此你的 Menu
class 需要是:
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);