我正在尝试使用JSON.NET lib解析来自oodle.com api feed的数据。要反序列化的响应JSON字符串的一部分具有以下“位置”结构:
"location":{
"address":"123 foo Street",
"zip":"94102",
"citycode":"usa:ca:sanfrancisco:downtown",
"name":"San Francisco (Downtown)",
"state":"CA",
"country":"USA",
"latitude":"37.7878",
"longitude":"-122.4101"},
但是我已经看到位置声明为空数组的实例:
"location":[],
我试图在类型的位置数据类中反序列化它。当位置具有有效数据时,这非常有效,但当位置表示为空数组时,它不能很好地工作。我尝试添加属性(NullValueHandling& Required),如果数据确实是一个空数组,则将位置实例设置为null,但我认为这些属性仅用于序列化。如果数组为空,我会得到一个异常
Cannot deserialize JSON array into type 'LocationData'
如果反序列化失败的数组,有没有办法告诉反序列化程序不要抱怨并使位置对象为null? 谢谢!
[JsonProperty(NullValueHandling = NullValueHandling.Ignore,Required=Required.AllowNull)]
public LocationData location{get;set;}
...
public class LocationData
{
public string zip { get; set; }
public string address { get; set; }
public string citycode { get; set; }
public string name { get; set; }
public string state { get; set; }
public string country { get; set; }
public decimal latitude { get; set; }
public decimal longitude { get; set; }
}
答案 0 :(得分:2)
您可以为LocationData
类型编写自定义转换器,以将数组标记转换为null。
类似的东西:
public class LocationDataConverter : JsonConverter
{
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.StartArray)
{
reader.Read(); //move to end array
return null;
}
var data = new LocationData();
serializer.Populate(reader, data);
return data;
}
}
然后只标记LocationData类:
[JsonConverter(typeof(LocationDataConverter))]
public class LocationData {...}