如果在JSON.NET中反序列化期间发现错误,我可以装饰类跳过

时间:2018-01-12 17:06:09

标签: c# attributes json.net deserialization

我有一个返回json的api。我正在使用JSON.NET反序列化为对象。

public sealed class ConfigurationCount
{
    [JsonProperty("count")]
    public int Count { get; set; }

    [JsonProperty("game")]
    public MyEnums.Game Game { get; set; }
}

Essentiall使用:

 JsonConvert.DeserializeObject<List<ConfigurationCount>>(json);

返回ConfigurationCount列表。

但是,有时候,json属性“game”无法转换为MyEnums.Game。在这种情况下,我只想跳过将此对象反序列化到列表中。

有没有什么方法可以用可能只是跳过错误的东西来装饰ConfigurationCount类? e.g。

[JsonObject(OnError = Skip)]
public sealed class ConfigurationCount { ... }

我不想写自定义的JsonConverter,因为我不确定我是如何在每个对象的基础上做的。

亲切的问候

亚当

1 个答案:

答案 0 :(得分:0)

我通常做这样的事情:

public sealed class ConfigurationCount
{
    [JsonProperty("count")]
    public int Count { get; set; }

    [JsonIgnore]
    public bool IsValid => Enum.IsDefined(typeof(MyEnums.Game), game);

    [JsonProperty("game")]
    private int game { get; set; }

    [JsonIgnore]
    public MyEnums.Game Game
    {
        get
        {
            if (!IsValid) throw new InvalidOperationException("Object is invalid");
            return (MyEnums.Game) game;
        }
        set { game = (int) value; } 
    }
}

然后你只需要反序列化所有内容,然后删除那些IsValid为false的内容。