在C#中反序列化不同类型对象的多个JSON数组
我有一个JSON字符串,其中包含固定数量的不同对象数组(使用JSONObjects
和JSONArrays
在Java中创建):
[ [ //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 Employees { get; set; } public List SecondTypes { get; set; } //etc. }
这是我尝试反序列化JSON数据的方法:
JavaScriptSerializer ser = new JavaScriptSerializer(); string jsonDataFromClient = ...; DataContainer jsonData = ser.Deserialize(jsonDataFromClient);
它不起作用。 传递数据时出现以下错误: Type 'GUI.ValidateLoginData+DataContainer' is not supported for deserialization of an array.
关于反序列化不同对象数组的问题,我找不到任何其他主题。
是的,我不会工作
请注意,在您的javascript对象中基本上是一个数组,因为javascript是一种动态语言,所以它是一个有效的数组
如果c#不是,那么数组(或列表)必须包含相同类型的对象。 但是,如果您仍然需要实现此function并且您可以控制JSON结构,请将其编辑为此
{ 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
类型的对象,虽然我没有尝试过,但它应该可以正常工作。 >
然而,这种解决方案的一个缺点是你无法区分两种不同类型的对象,即Employee
和SecondTypes
使用此在线工具为您创建C#类。 然后,您可以根据需要微调类(名称等)。 至少,您可以了解您正在创建的模型类是否正确。
JSON到C#
你有没有[Serializable]属性添加到你的DataContainer?