【发布时间】:2018-03-21 06:27:01
【问题描述】:
我正在尝试将 json 反序列化为 RequestWithDefault 对象
JSON:
{
"fields":["f1","f2"]
}
我的简单类图:
[DataContext]
public abstract class BaseRequest
{
[DataMember]
public virtual List<string> Fields { get; set; }
}
[DataContext]
public class RequestWithDefault : BaseRequest
{
[DataMember]
public override List<string> Fields {get; set; } = new List<string> {"test"}
}
将 json 反序列化为 RequestWithDefault 后,对象 Fields 属性包含 ["test", "f1", "f1"]。我想确保仅在请求中未指定 Fields 或指定为 null 时才应用此默认值。我怎么能做到这一点?我尝试使用 [OnDeserializing] 属性但没有成功。结果是一样的
据此:
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/collection-types-in-data-contracts
看起来像在反序列化期间 DataContractSerializer 从集合中调用 Add 方法。这就是为什么我也有默认值并添加了其余项目的原因。当我将 List<string> 替换为 string[] 时,一切正常。
【问题讨论】:
标签: c# json datacontractserializer datamember