2011-03-21 80 views
29

在WCF您可以使用[DataContract][DataMember]屬性定義一個合同,是這樣的:爲什麼不推薦使用[DataMember(EmitDefaultValue = false)]?

[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的兩個插件看起來都和我相當(並且最後一部分可以正確地反序列化這個合同)。

這句話背後的推理是什麼?

回答

21

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

  • EmitDefaultValue設置爲false,它在架構具體到Windows通訊基礎(WCF)的註解表示。沒有可互操作的方式來表示這些信息。特別是,模式中的「默認」屬性不用於此目的,minOccurs屬性僅受IsRequired設置的影響,並且nillable屬性僅受數據成員類型的影響。

  • 模式中不存在要使用的實際默認值。由接收端點來適當解釋缺失的元素。

+3

其中重要的部分似乎是內部關注。如果您在調用的兩側使用.net技術,並強烈鍵入數據合同,則不應出現問題。 – Gent 2014-09-04 15:53:30

相關問題