2010-12-16 101 views
1

具有[DataContract]屬性的類是否不會自動序列化? 如果不是,是否需要使用[Serializable]屬性(或從ISerialize繼承)?WCF DataContract需要序列化?

我問這是因爲我有一個來自以前項目的舊代碼,顯然[DataContract]類沒有提及任何關於序列化的明確內容。

最終的問題: 我想要一個WCF操作(方法)返回一個DataContract類。 該方法是否必須在返回它之前顯式序列化該類,還是自動序列化?我一直認爲這將是後者。

謝謝!

回答

4

不,[Serializable]在數據合同中是不需要的。 XML序列化也不是必需的。

+0

因此,從一個WCF方法內,我可以返回一個DataContract類型的對象,而無需在返回時在xml中手動序列化?換句話說,我可以簡單地返回DataContract對象,它將被xml序列化,對吧? – AlvinfromDiaspar 2010-12-16 17:26:55

+0

@Alvin:沒錯。我建議你在Visual Studio中創建一個新的WCF服務,並查看它創建的代碼。它完全是這樣。 – 2010-12-16 19:31:51

1

在.NET中有幾個序列化選項。 SerializableAttribute和ISerializable可以回到開頭,並由BinaryFormatter,SoapFormatter等使用。

DataContractSerializer相對較新,可以支持使用SerializableAttribute定義其序列化能力的對象,但這不是必需的。如果您只是使用DataContractSerializer序列化對象,那麼只需使用數據協定屬性即可。

顯然,標記爲可序列化的成員也必須是可序列化的類型。請參閱Types Supported by the Data Contract Serializer

+0

因此,DataContract屬性看起來像是告訴它首先使用DataContractSerializer。 – AlvinfromDiaspar 2010-12-16 17:11:04

+0

@Alvin:不,數據合約序列化程序是默認的。 – 2010-12-16 19:32:09