[英]Ignore property when wrong type due deserialization in json.net
在我的c#app中,我使用json.net
庫來處理jsons。
我有情況:
屬性:
[JsonProperty("my_test_property_json_key", NullValueHandling = NullValueHandling.Ignore)]
public int[] MyTestProperty{ get; set; }
當我的這個專業的json看起來像:
[0,1,2,3,4,5]
一切都很棒。 但是當我有錯誤的json值時可能的情況如下:
[[0,1,2,3]]
在這種情況下,我得到例外:
[Newtonsoft.Json.JsonReaderException] = {"Error reading integer. Unexpected token: StartArray. Path 'my_test_property_json_key[0]', line 1, position 3250."}
在這種情況下的正確行為應該是:
return empty int[]
。
我有什么可以忽略這個屬性,當我有錯誤的json(屬性存在,但它是一個不同的類型)?
注意:我的json太大了(很多其他屬性) - 我不能用默認數據重新創建它(我不能丟失數據)。
您可以創建一個嘗試讀取整數數組的自定義轉換器,如果數據不正確,則返回一個空數組:
class MyCustomInt32ArrayConverter : JsonConverter
{
public override object ReadJson(
JsonReader reader,
Type objectType,
Object existingValue,
JsonSerializer serializer)
{
var array = serializer.Deserialize(reader) as JArray;
if (array != null)
{
return array.Where(token => token.Type == JTokenType.Integer)
.Select(token => token.Value<int>())
.ToArray();
}
return new int[0];
}
public override void WriteJson(
JsonWriter writer,
Object value,
JsonSerializer serializer)
{
serializer.Serialize(writer, value);
}
public override bool CanConvert(Type objectType)
{
return objectType == typeof(int[]);
}
}
只需使用JsonConverterAttribute
屬性將轉換器JsonConverterAttribute
屬性:
[JsonConverterAttribute(typeof(MyCustomInt32ArrayConverter))]
[JsonProperty("my_test_property_json_key", NullValueHandling = NullValueHandling.Ignore)]
public int[] MyTestProperty{ get; set; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.