[英]Deserialization JSON object vs. array
我從 REST-API 得到以下 JSON 消息作為返回:
{
"result":{
"CONTACT":[
102565,
523652
],
"COMPANY":[
30302
]
}
}
對於反序列化,我將 Newtonsoft.Json 與以下類一起使用:
public class DuplicateResponseBody {
[JsonProperty("result")]
public ContactCompany Result { get; set; }
}
public class ContactCompany {
[JsonProperty("CONTACT")]
public int[] ContactIds { get; set; }
[JsonProperty("COMPANY")]
public int[] CompanyIds { get; set; }
}
這工作沒有問題。
但是當沒有值時,REST-Response 看起來像
{
"result":[]
}
結果不是數組,反序列化將不再起作用。 我無法更改 REST-API。
有人有想法,我該如何解決反序列化步驟的問題?
我認為您不需要任何轉換器,只需將 json 構造函數添加到您的類就足夠了
public class DuplicateResponseBody
{
[JsonProperty("result")]
public ContactCompany Result { get; set; }
[Newtonsoft.Json.JsonConstructor]
public DuplicateResponseBody(JToken result)
{
if ( result.Type.ToString()!="Array")
Result= result.ToObject<ContactCompany>();
}
public DuplicateResponseBody() {}
}
您可以為該屬性實現自定義JsonConverter
並將數組視為null
。
public class ContactCompanyConverter : JsonConverter<ContactCompany>
{
public override ContactCompany ReadJson(
JsonReader reader,
Type objectType,
ContactCompany existingValue,
bool hasExistingValue,
JsonSerializer serializer)
{
var token = JToken.Load(reader);
return token.Type != JTokenType.Array ? token.ToObject<ContactCompany>() : null;
}
public override void WriteJson(
JsonWriter writer,
ContactCompany value,
JsonSerializer serializer)
{
var token = JToken.FromObject(value);
token.WriteTo(writer);
}
}
為了使用轉換器,只需通過您的屬性上的JsonConverterAttribute
傳遞它。
public class DuplicateResponseBody
{
[JsonProperty("result")]
[JsonConverter(typeof(ContactCompanyConverter))]
public ContactCompany Result { get; set; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.