【发布时间】:2021-11-22 05:30:59
【问题描述】:
我有一个类,其属性设置器依赖于VeryImportantProperty。但该属性不应按设计进行序列化。
所以,当我收到 JSON 时,我必须在反序列化期间和设置其他属性之前设置 VeryImportantProperty。
我想可以通过修改ContractResolver来完成。我在那里存储VeryImportantProperty 的值,但我不知道如何分配它
我尝试使用以下ContractResolver,但不影响
public class MyContractResolver : DefaultContractResolver
{
public VeryImportantClass VeryImportantPropertyValue { get; set; }
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
var property = base.CreateProperty(member, memberSerialization);
if (property.PropertyName == "VeryImportantProperty" && VeryImportantPropertyValue != null)
{
property.DefaultValue = VeryImportantPropertyValue;
property.DefaultValueHandling = DefaultValueHandling.Populate;
property.Order = -1;
}
return property;
}
}
【问题讨论】:
-
VeryImportantProperty 的价值是多少?会根据同类的其他属性计算吗? ...还是在调用 Deserialize() 时必须提供的值?一个代码示例将有助于更好地理解问题。
-
@ChristophLütjen 我将在调用 Deserialize() 时提供值(例如将其设置为 ContractResolver 属性)
-
请尝试与我们分享Minimal, Reproducible Example
-
顺便说一句。听起来你只是有两个不同的模型。一个 dto 来表示 json 请求以及您在应用程序中需要的其他内容。可以选择为此简单地使用两个不同的类。
-
@ChristophLütjen 我愿意,但不幸的是,有成千上万个这样的遗留类。所以我必须寻找另一种解决方案
标签: c# .net serialization json.net