我有一个契约(Contract)如下:
[DataContract]
public class MyObj
{
[DataMember(IsRequired=true)]
public string StrA {get; private set;}
[DataMember(IsRequired=false)]
public string StrB {get; private set;}
}
究竟是做什么的
IsRequired
意思?是否IsRequired=false
意味着我可以传递 MyObj
的实例与 StrB
隔着电线单元化还是意味着我可以传递 MyObj
的实例与 StrB
隔着电线缺席的?如果是后者,我如何实际实例化+发送
MyObj
的实例没有 StrB
?
最佳答案
DataMember的 IsRequired 告诉序列化引擎 StrB 的值是否必须出现在底层 XML 中。
所以通过电线你可以得到 <MyObj></MyObj>
它会反序列化为 MyObj 实例就好了。
编辑:如果不存在 StrB,您实际上无法初始化 MyObj 的实例。这样做的用途是兼容性和可扩展性。例如,可能客户端没有更新的 MyObj 版本并且它没有 StrB 存在。在这种情况下,服务器代码可以将 StrB 标记为不需要,并且在服务器端收到消息时不会出现序列化异常。
关于WCF DataContract - 标记成员 IsRequired=false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1566803/