我有一个JSON字符串,其中包含固定数量的不同对象数组(使用Java JSONObjects
和JSONArrays
创建):
[
[ //The first type of object
{
"Initials":"MUS"
},
{
"Initials":"NA"
}
],
[ //The second type
{
"ToolId":17
},
{
...
}
]
... //etc.
]
所以我创建了一些Dummy-classes,它们对数组中的对象具有相应的属性,这有用:
private class DummyEmployee
{
public string Initials { get; set; }
}
//etc.
但我无法弄清楚应该如何设计容器类。我就这样做了:
private class DataContainer
{
public List<DummyEmployee> Employees { get; set; }
public List<DummySecondType> SecondTypes { get; set; }
//etc.
}
这就是我尝试反序列化JSON数据的方法:
JavaScriptSerializer ser = new JavaScriptSerializer();
string jsonDataFromClient = ...;
DataContainer jsonData = ser.Deserialize<DataContainer>(jsonDataFromClient);
它不起作用。传递数据时出现以下错误:
Type 'GUI.ValidateLoginData+DataContainer' is not supported for deserialization of an array.
关于反序列化不同对象数组的问题,我找不到任何其他主题。
答案 0 :(得分:2)
{
Employees:[ //The first type of object
{
"Initials":"MUS"
},
{
"Initials":"NA"
}
],
SecondTypes:[ //The second type
{
"ToolId":17
},
{
...
}
]
... //etc.
}
并且您当前的c#对象可能正确映射。
如果您无法控制JSON结构,则必须在c#
中使用动态对象
更新: - 表示您无法控制JSON结构的情况(或者您不想编辑它)。
尝试将JSON对象反序列化为动态类型的数组
更新2: - 因为你很好奇尝试将现有JSON结构反序列化为List<List<dynamic>>
类型的对象,虽然我没有尝试过,但它应该可以正常工作。
然而,这个解决方案的一个缺点是你无法区分两种不同类型的对象,即Employee
和SecondTypes
答案 1 :(得分:0)
使用此在线工具为您创建C#类。然后,您可以根据需要微调类(名称等)。至少,您可以了解您正在创建的模型类是否正确。
答案 2 :(得分:0)
您是否将[Serializable]属性添加到DataContainer?