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



我遇到一个问题,我使用的依赖项设置了

[DataMemberAttribute(IsRequired = true)]

但它并没有将价值从一个点传递到另一个点。

这对他们有效,因为他们使用的是不关心DataMemberAttributeServiceStack.Text

但我使用的是Json.net,它确实检查了这个属性,但随后失败了。

(我所说的依赖性的支持者已经承认,他们在按要求设置它时有错。总有一天可能会有解决方案。但等待太久了。)

如果我创建一个新的序列化程序设置,比如:,它甚至都不起作用

new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };

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

序列化程序设置从未在该方法中检查过,也从未在抛出该设置的JsonSerializerInternalReader.EndObject()中检查过:

"在JSON中找不到必需的属性"…"。"

因此:

  • 这是Json.net中的一个错误吗;也就是说,不注意序列化程序设置
  • 有没有什么方法可以在不修改源代码的情况下更改这种行为

提前谢谢!

我通过重写DefaultContractResolverCreateProperty方法解决了这个问题,并编写了如下代码:

protected override JsonProperty CreateProperty(MemberInfo m, MemberSerialization s)
{
    var property = base.CreateProperty(m, s);
    property.Required = Required.Default;
    return property;
}

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

相关内容

  • 没有找到相关文章

最新更新