wcf - 为什么不推荐使用 [DataMember(EmitDefaultValue = false)]?

标签 wcf msdn datacontract datamember

在 WCF 中,您可以使用 [DataContract] 定义契约(Contract)。和 [DataMember]属性,像这样:

[DataContract]
public class Sample 
{
    [DataMember(EmitDefaultValue = false, IsRequired = false)]
    public string Test { get; set; }
}

This article on the MSDN声明使用 EmitDefaultValue = false不推荐:

snippet

但是,我喜欢使用它,因为使用这种构造生成的 XML 更干净。不指定此设置会导致:
<Sample>
    <Test xsi:nil="true"/>
</Sample>

在使用设置时,当没有值时元素被省略:
<Sample>
</Sample>

我很好奇这句话背后的原因是什么。特别是因为 XML 的两个片段看起来都和我一样(并且最后一部分都可以为这个契约(Contract)正确反序列化)。

这种说法背后的原因是什么?

最佳答案

原因在您链接到的文章的底部。简短的版本是:

  • EmitDefaultValue设置为 false,它在架构中表示为特定于 Windows Communication Foundation (WCF) 的注释。没有可互操作的方式来表示此信息。特别是,架构中的“默认”属性不用于此目的,minOccurs属性仅受 IsRequired 影响设置和 nillable属性仅受数据成员类型的影响。
  • 架构中不存在要使用的实际默认值。由接收端点适当解释缺失的元素。
  • 关于wcf - 为什么不推荐使用 [DataMember(EmitDefaultValue = false)]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5382402/

    相关文章:

    c# - WCF 数据服务 - 客户端正在缓存结果

    c++ - C++ 标准不提供这种类型的散列

    c# - 查找哪个 .NET 程序集定义了类型

    c++ - 有没有办法让 MSAA IAccessible 遍历更快?

    python - 在Python环境中使用Kafka进行合约测试?

    c# - WCF 服务从 DataContract 接收空值

    wcf - 在 wcf 中返回原始 json(字符串)

    c# - 计算通过 WCF 的包(数据契约(Contract))的大小?

    c# - 取消对 SSRS 的长时间运行的异步 WCF 调用

    wcf - 企业级数据契约(Contract)是一种好的做法吗?