这很难:基本上我想将一个复杂的JSON对象映射到一个由不同但相似的复杂类型组成的集合到C#模型中。 这是我的ASP.NET Web API将收到的默认JSON:
{
"Id": "000111222333",
"Move": {
"Address2": {
"City": "CityName",
"Street": "StreetName",
"PostalCode": "4444",
"HouseNumber": "4",
"Country": "NLD",
"IsInhabited": "true"
},
"Contracts": {
"ElectricityContract": {
"ContractId": "000000031",
"ContractNumber": "00000011",
"EANCode": "53123123123123",
"StartDate": "2000-01-20",
"EndDate": "2017-06-06",
"IsBuildingComplex": "false",
"ForceSingleTariff": "false"
},
"CableContract": {
"ContractId": "456454546353",
"ContractNumber": "12312312313",
"StartDate": "2000-01-20",
"EndDate": "2017-01-23"
}
}
}
}
我的问题是,我似乎无法将不同类型的合同作为单个集合接收。
我试图将“Contracts”序列映射到ArrayList,但它始终为“null”。 我试图将它映射到ICollection / IEnumerable / List< IContract>所有合同都是IContract的类型。但这并不奏效。
我已经开始从JSON字符串手动映射,但我希望有更好的方法来做到这一点?所有帮助表示赞赏。
答案 0 :(得分:1)
要在此对象中获取Contracts集合,您需要将JSON更改为此
{
...
"Contracts": [
{
"ContractId": "000000031",
"Type": "ElectricityContract",
"ContractNumber": "00000011",
"EANCode": "53123123123123",
"StartDate": "2000-01-20",
"EndDate": "2017-06-06",
"IsBuildingComplex": "false",
"ForceSingleTariff": "false"
},
{
"ContractId": "456454546353",
"Type" : "CableContract",
"ContractNumber": "12312312313",
"StartDate": "2000-01-20",
"EndDate": "2017-01-23"
}
]
}
因此,Contracts将是一个JSON集合而不是一个对象,您可以使用自定义绑定到ICollection/IEnumerable/List<IContract>
来映射它。此绑定应根据Type
属性创建不同的IContract实现。
怎么做 - 看看this post。