2013-08-28 148 views
0

我有一個關於[DataContract]屬性的問題。WCF DataContract屬性

我已經寫下了我的代碼,如下所示:這裏我沒有對我的測試類使用[DataContract]屬性。

class test 
    { 
     [Datamember] 
     public string Strproperty 
     { 
      get; 
      set; 
     } 
     [Datamemer] 
     public string Strproperty2 
     { 
      get; 
      set; 
     } 
    } 


class checktotal:Iservice 
    { 
    public string testmethod(test obj) 
     { 
      return obj.Strproperty+Strproperty2; 
     } 
    } 

爲此,我從客戶端發送數據,我正確地獲取值。

下面是有必要使用該測試類的[DataContract]屬性?

如果我刪除[Datamember]對於測試類屬性在從客戶端發送時出錯。但即使我沒有使用[DataContract]屬性,我也沒有收到任何錯誤。

請給我一個簡單的例子說明,以便我能理解何時給予該屬性,何時不給該屬性。

謝謝, Satya Pratap。

回答

1

如果DataContractSerializer提供默認構造函數,則它可以處理沒有DataContract屬性的類。有關更多詳細信息,請參閱MSDN documentation

1

從.NET 3.5起Service Pack 1,可以省略(不使用)[DataContract][DataMember]屬性。如果你這樣做,那麼WCF中的DataContractSerializer就像XML序列化程序一樣 - 它只會序列化所有公共屬性。

我更喜歡使用[DataContract][DataMember]明確無論如何 - 它給我指定的選項(如數據合同的XML命名空間中,[DataMember]的順序)的機會,它讓我如也從序列化中排除某些屬性。

只要你在一個屬性開始使用[DataMember]很快,然後只有飾有[DataMember]這些屬性將在爲WCF序列化看去。

+0

你是說我們可以用[DataContractSerializer]屬性來提及那個類嗎?簡單解釋一下。我使用.net 4.0框架。 – Balu

+0

@Balu:**無論你使用**什麼都沒有** - >那麼WCF的DataContractSerializer就像XmlSerializer一樣工作; **或者**你在課堂中的任何地方都使用[DataContract]和[DataMember]。選一個。你不能混用這兩種方法。 –