我正在尝试从第三方提供程序反序列化某些json,偶尔会返回一些无效的日期字段(如-0001-01-01或其他内容)。这会导致进程抛出异常。
有没有办法告诉Json.Net忽略无效的字段?
由于
马特
答案 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的设计者之后,将其用作临时解决方案。