簡體   English   中英

在json.net中由於反序列化而錯誤的類型時忽略屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM