WCF DataContract - 标记成员 IsRequired=false

标签 wcf datacontract

我有一个契约(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/

相关文章:

c# - "Type"属性的 DataContract 序列化

regex - 具有 RegEx 列表的 WCF DataContract 无法正确序列化

wcf - XmlSerializer 与 DataContractSerializer

c# - C# DataContracts 的表现力是否足以正确描述 GeoJSON?

c# - .Net Rest Web 服务响应具有默认的数据协定命名空间而不是预期的命名空间

c# - DataMember IsRequired 属性与 Nullable 类型的组合是否矛盾?

c# - 使用 DataContract 从 List<> 派生的类的序列化

c# - 当我在 WCF 中使用类/属性时,我应该将它们装饰为 DataContract/DataMember 吗?

wcf - 在运行时更改跟踪监听器的开关值

c# - 有什么方法可以处理 ASMX 服务背后的异步/等待吗?