我有一份合同如下:
[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是否意味着我可以在StrB单一化的情况下传递MyObj的实例,或者这意味着我可以在没有StrB的情况下传递MyObj的实例?
如果是后者,我如何在没有StrB的情况下跨MyObj实例实例化+发送
发布于 2009-10-14 14:53:53
DataMember的IsRequired告诉序列化引擎StrB的值是否必须在底层XML中显示。
因此,您可以通过网络获取<MyObj></MyObj>,它将很好地反序列化为MyObj实例。
编辑:如果没有StrB,你实际上不能初始化MyObj的实例。它的用途是兼容性和可扩展性。例如,可能客户端没有更新的MyObj版本,也没有StrB。在这种情况下,服务器代码可以将StrB标记为不需要,并且在服务器端收到消息时不会出现序列化异常。
发布于 2009-10-14 16:12:00
我如何在没有StrB的情况下实例化+发送一个MyObj实例?
正如我在WCF and Anonymous Types中提到的,您可以使用DataMember(EmitDefaultValue=false)。这将确保当数据成员为其默认值时(例如,字符串为null ),它不会被发出。
https://stackoverflow.com/questions/1566803
复制相似问题