我正在尝试将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[]
时,一切正常。
答案 0 :(得分:1)
似乎WCF序列化从不使用setter来设置具有集合类型的'Hello World'
的值,而是使用DataMember
代替。因此,检查Add
是否具有任何值的唯一方法是在反序列化之后进行检查(而不是在反序列化时)。
fields