WCF DataContract - 标记成员IsRequired = false

Tam*_*ali 5 wcf datacontract

我的合同如下:

[DataContract]
public class MyObj
{
    [DataMember(IsRequired=true)]
    public string StrA {get; private set;}

    [DataMember(IsRequired=false)]
    public string StrB {get; private set;}
}
Run Code Online (Sandbox Code Playgroud)

究竟是什么IsRequired意思?是否IsRequired=false意味着我可以通过单元化传递一个MyObj跨线的实例,StrB或者它是否意味着我可以传递一个MyObj跨越线的实例StrB而不存在?

如果是后者,我如何实际实例化+发送一个MyObj没有的实例StrB

Szy*_*zga 3

DataMember的 IsRequired 告诉序列化引擎 StrB 的值是否必须在底层 XML 中呈现。

因此,您可以通过网络获取它<MyObj></MyObj>,并且它将反序列化为 MyObj 实例。

编辑:如果没有 StrB 存在,您实际上无法初始化 MyObj 的实例。这样做的目的是兼容性和可扩展性。例如,客户端可能没有更新的 MyObj 版本,并且不存在 StrB。在这种情况下,服务器代码可以将StrB标记为不需要,服务器端收到消息时不会出现序列化异常。