在C#中反序列化不同类型对象的多个JSON数组

我有一个JSON字符串,其中包含固定数量的不同对象数组(使用JSONObjectsJSONArrays在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>类型的对象,虽然我没有尝试过,但它应该可以正常工作。
然而,这种解决方案的一个缺点是你无法区分两种不同类型的对象,即EmployeeSecondTypes

使用此在线工具为您创建C#类。 然后,您可以根据需要微调类(名称等)。 至少,您可以了解您正在创建的模型类是否正确。

JSON到C#

你有没有[Serializable]属性添加到你的DataContainer?