即使NullValueHandling为Ignore,也会使用DataMemberAttribute.IsRequired

时间:2014-04-20 21:58:17

标签: json.net

我遇到的问题是我使用的依赖项已设置

[DataMemberAttribute(IsRequired = true)]

但它并没有从一个点向另一个点发送值。

它适用于他们,因为他们使用的ServiceStack.Text不关心DataMemberAttribute

但我正在使用Json.net,它会检查此属性并随后失败。

(我所讨论的依赖关系的支持已经承认他们在按需要设置它时有错。可能有一天会出现修复。但这等待的时间太长了。)

如果我创建一个新的序列化设置,例如:

,它甚至不起作用
new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };

该属性仍在Required.AllowNull的方法SetPropertySettingsFromAttributes()中设为DefaultContractResolver.cs

永远不会在该方法中检查序列化程序设置,也不会在引发此行为的JsonSerializerInternalReader.EndObject()中检查:

  

在JSON中找不到“必需属性'...'。”

所以:

  • 这是Json.net中的错误;那不是序列化器设置的附件吗?
  • 有没有办法在不修改源代码的情况下改变这种行为?

提前谢谢!

1 个答案:

答案 0 :(得分:1)

我通过覆盖CreateProperty的{​​{1}}方法解决了这个问题,并编写了如下代码:

DefaultContractResolver

不是最优雅的解决方案......但它有效,并允许我忽略任何和所有必需的检查。这可能不是最佳解决方案,但足以满足我的需求。