在WCF中,您可以使用[DataContract]和[DataMember]属性定义合同,如下所示:
[DataContract]
public class Sample
{
[DataMember(EmitDefaultValue = false, IsRequired = false)]
public string Test { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
MSDN上的这篇文章指出EmitDefaultValue = false不建议使用:

但是,我喜欢使用它,因为使用这种结构生成的XML更清晰.未指定此设置会导致:
<Sample>
<Test xsi:nil="true"/>
</Sample>
Run Code Online (Sandbox Code Playgroud)
使用设置时,如果没有值,则省略元素:
<Sample>
</Sample>
Run Code Online (Sandbox Code Playgroud)
我很好奇这个陈述背后的原因是什么.特别是因为XML的两个snipptes看起来都等同于我(并且最后一部分可以为此契约正确地反序列化).
这句话背后的原因是什么?