在Json.Net

时间:2015-04-22 12:43:12

标签: c# json json.net

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

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

由于

马特

3 个答案:

答案 0 :(得分:2)

为了扩展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"));
    }
}

然后应用如下:

var result = JsonConvert.DeserializeObject<TestClass>(json, new SafeDateTimeConvertor());

答案 1 :(得分:1)

JSON.NET有许多控制序列化的方法。例如,您可以查看Conditional Property (De)Serialization

Serializing Dates上的在线文档中有一个完整的主题。

您可以编写自定义转换器;请参阅Newtonsoft.Json.Converters命名空间的文档。

答案 2 :(得分:0)

事实上,第三方可以忽略其JSON中的类型安全性。我建议你联系他们。我有一个场景,其中属性是字符串数组或“假”。 Json.NET不喜欢这样的临时黑客,我创建了这个自定义转换器来忽略反序列化异常:

> s
  topicML gender sentiment topicV
1       0   male         0      0

不建议使用此“TryConvert”方法。在将您的想法发送给正在使用的原始JSON的设计者之后,将其用作临时解决方案。