在 Json.Net 中反序列化 json 时忽略无效字段

Mat*_*ton 1 c# json json.net

我正在尝试反序列化来自 3rd 方提供商的一些 json,偶尔它会返回一些无效的日期字段(如 -0001-01-01 或其他内容)。这会导致进程抛出异常。

有没有办法告诉 Json.Net 忽略无效的字段?

谢谢

马特

Mat*_*ton 5

为了扩展 David 的回答,我使用了一个自定义的 DateTime 转换器:

public class SafeDateTimeConvertor : DateTimeConverterBase
{
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        DateTime result;
        if (DateTime.TryParse(reader.Value.ToString(), out result))
            return result;
        return existingValue;
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        writer.WriteValue(((DateTime)value).ToString("yyyy-MM-dd hh:mm:ss"));
    }
}
Run Code Online (Sandbox Code Playgroud)

然后像这样应用:

var result = JsonConvert.DeserializeObject<TestClass>(json, new SafeDateTimeConvertor());
Run Code Online (Sandbox Code Playgroud)