的默认值使用JsonConverter而忽略默认值
问题描述:
我刚刚升级从newtonsoft 4.5〜5我的JSON序列 -
我有一个自定义JsonConverter
处理DateTime
类型,而且我的日期转换为与我共事的数字,但有DafaultValueHandling
设置为DefaultValueHandling.Ignore
它不起作用DateTime
的是null
。的默认值使用JsonConverter而忽略默认值
我想我的自定义JsonConverter
转换DateTime
的值,即使它们为空,也可以使用设置DefaultValueHandling.Ignore
。
可以这样做吗?
答
只是为了记录 - 如果有人遇到同样的问题 - 这似乎是不能用newtonsoft JSON转换器完成。
它只是证明它首先忽略了值为defualt的值,然后才使用您的CustomConverter
s来表示剩余的具有值的属性。
答
由于DateTime's
默认值为null
,您的DefaultValueHandling.Ignore
设置会忽略它。因此,您可以在此为DateTime
属性设置自己的默认值。
通过这样做,JsonSerializer现在将假设null
不是DateTime的默认值,因此您的JsonConvertor在DateTime中遇到null
时将工作。看下面的例子。
public class TempClass
{
[DefaultValue(DateTime.MinValue)]
public DateTime CurrentDate;
}
在上例中,将DateTime.MinValue
设置为CurrentDate属性的默认值。所以如果CurrentDate
为空,那么DefaultValueHandling.Ignore
也不会忽略。
还没有尝试过,但希望它能工作。
DateTime不能为null,它有一个实际的默认值,它等于'new DateTime()'。无视这一点,这仍然不是一个好的解决方案,因为我有一个非常庞大的代码库,有很多像这样的对象,我不想去查看所有这些对象,并添加该属性,我不想每次更多(或我团队中的其他开发人员)添加对象必须添加此属性。 – gillyb 2013-05-08 13:35:46