2013-05-07 140 views
0

我刚刚升级从newtonsoft 4.5〜5我的JSON序列 -
我有一个自定义JsonConverter处理DateTime类型,而且我的日期转换为与我共事的数字,但有DafaultValueHandling设置为DefaultValueHandling.Ignore它不起作用DateTime的是null的默认值使用JsonConverter而忽略默认值

我想我的自定义JsonConverter转换DateTime的值,即使它们为空,也可以使用设置DefaultValueHandling.Ignore

可以这样做吗?

回答

0

只是为了记录 - 如果有人遇到同样的问题 - 这似乎是不能用newtonsoft JSON转换器完成。
它只是证明它首先忽略了值为defualt的值,然后才使用您的CustomConverter s来表示剩余的具有值的属性。

-2

由于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也不会忽略。

还没有尝试过,但希望它能工作。

+1

DateTime不能为null,它有一个实际的默认值,它等于'new DateTime()'。无视这一点,这仍然不是一个好的解决方案,因为我有一个非常庞大的代码库,有很多像这样的对象,我不想去查看所有这些对象,并添加该属性,我不想每次更多(或我团队中的其他开发人员)添加对象必须添加此属性。 – gillyb 2013-05-08 13:35:46