![](/img/trans.png)
[英]deserializing JSON to .net object using NewtonSoft - array
[英]Newtonsoft JSON deserializing array with differing object types
我正在尝试以最有效的方式对json数组中的不同对象类型进行反序列化,但是我真的看不到如何以任何直接的方式完成。 我正在使用Newtonsoft.Json库进行解析。
我已经建立了一个简单的示例来说明我要解决的问题,要绑定到的类以及正在使用的JSON格式,如下所示:
class Car
{
public int Wheels { get; set; }
public String Manufacturer { get; set; }
public String Colour { get; set; }
public double EngineSize { get; set; }
public String Year { get; set; }
}
class Aeroplane
{
public String Model { get; set; }
public String Airline { get; set; }
public int JourneyCount { get; set; }
}
class Ship
{
public String Name { get; set; }
public String Company { get; set; }
public int Capacity { get; set; }
public String YearBuilt { get; set; }
}
这是我要绑定到这些类的JSON。 它设置为在每个位置具有三种不同嵌套对象类型的数组。 基本上,数组中的每个元素/索引都包含三个对象,即汽车,飞机和轮船。
{[
{
"car": {
"wheels": 4,
"manufacturer": BMW,
"colour": "Black",
"engineSize": "1.6"
},
"aeroplane": null,
"ship": null
},
{
"car": {
"wheels": 4,
"manufacturer": BMW,
"colour": "Black",
"engineSize": "1.6"
},
"aeroplane": {
"model": "Dreamliner",
"airline": "Emirates",
"journeyCount": 4798
},
"ship": {
"name":"Queen Mary",
"company":"Cunard",
"capacity": 890,
"yearBuilt": 2000
}
},
{
"car": {
"wheels": 4,
"manufacturer": BMW,
"colour": "Black",
"engineSize": "1.6"
},
"aeroplane": {
"model": "Boeing 777",
"airline": "BA",
"journeyCount": 6158
},
"ship": {
"name":"HMS Diamond",
"company":"Royal Navy",
"capacity": 500,
"yearBuilt": 2010
}
}
]}
首先,您的json无效。 要使其有效,您需要去除顶部的花括号。 也有一些遗漏的报价。 您可以使用JSON Lint进行验证。 它看起来应该像这样:
[
{
"car": {
"wheels": 4,
"manufacturer": "BMW",
"colour": "Black",
"engineSize": "1.6"
},
"aeroplane": null,
"ship": null
},
{
"car": {
"wheels": 4,
"manufacturer": "BMW",
"colour": "Black",
"engineSize": "1.6"
},
"aeroplane": {
"model": "Dreamliner",
"airline": "Emirates",
"journeyCount": 4798
},
"ship": {
"name": "Queen Mary",
"company": "Cunard",
"capacity": 890,
"yearBuilt": 2000
}
},
{
"car": {
"wheels": 4,
"manufacturer": "BMW",
"colour": "Black",
"engineSize": "1.6"
},
"aeroplane": {
"model": "Boeing 777",
"airline": "BA",
"journeyCount": 6158
},
"ship": {
"name": "HMS Diamond",
"company": "Royal Navy",
"capacity": 500,
"yearBuilt": 2010
}
}
]
您还需要一堂课来包装汽车,飞机和轮船:
public class VehicleWrapper
{
public Car Car { get; set; }
public Aeroplane Aeroplane { get; set; }
public Ship ship { get; set; }
}
现在,您可以使用以下行反序列化它:
List<VehicleWrapper> vehicles = JsonConvert.DeserializeObject<List<VehicleWrapper>>(jsonString);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.