我遇到一个问题,我使用的依赖项设置了
[DataMemberAttribute(IsRequired = true)]
但它并没有将价值从一个点传递到另一个点。
这对他们有效,因为他们使用的是不关心DataMemberAttribute
的ServiceStack.Text
。
但我使用的是Json.net,它确实检查了这个属性,但随后失败了。
(我所说的依赖性的支持者已经承认,他们在按要求设置它时有错。总有一天可能会有解决方案。但等待太久了。)
如果我创建一个新的序列化程序设置,比如:,它甚至都不起作用
new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };
在DefaultContractResolver.cs
中的方法SetPropertySettingsFromAttributes()
中,该属性仍设置为Required.AllowNull
。
序列化程序设置从未在该方法中检查过,也从未在抛出该设置的JsonSerializerInternalReader.EndObject()
中检查过:
"在JSON中找不到必需的属性"…"。"
因此:
- 这是Json.net中的一个错误吗;也就是说,不注意序列化程序设置
- 有没有什么方法可以在不修改源代码的情况下更改这种行为
提前谢谢!
我通过重写DefaultContractResolver
的CreateProperty
方法解决了这个问题,并编写了如下代码:
protected override JsonProperty CreateProperty(MemberInfo m, MemberSerialization s)
{
var property = base.CreateProperty(m, s);
property.Required = Required.Default;
return property;
}
不是最优雅的解决方案。。。但它有效,并允许我忽略任何和所有必需的检查。这可能不是最理想的解决方案,但足以满足我的需求。