具有[DataContract]屬性的類是否不會自動序列化? 如果不是,是否需要使用[Serializable]屬性(或從ISerialize繼承)?WCF DataContract需要序列化?
我問這是因爲我有一個來自以前項目的舊代碼,顯然[DataContract]類沒有提及任何關於序列化的明確內容。
最終的問題: 我想要一個WCF操作(方法)返回一個DataContract類。 該方法是否必須在返回它之前顯式序列化該類,還是自動序列化?我一直認爲這將是後者。
謝謝!
具有[DataContract]屬性的類是否不會自動序列化? 如果不是,是否需要使用[Serializable]屬性(或從ISerialize繼承)?WCF DataContract需要序列化?
我問這是因爲我有一個來自以前項目的舊代碼,顯然[DataContract]類沒有提及任何關於序列化的明確內容。
最終的問題: 我想要一個WCF操作(方法)返回一個DataContract類。 該方法是否必須在返回它之前顯式序列化該類,還是自動序列化?我一直認爲這將是後者。
謝謝!
不,[Serializable]
在數據合同中是不需要的。 XML序列化也不是必需的。
在.NET中有幾個序列化選項。 SerializableAttribute和ISerializable可以回到開頭,並由BinaryFormatter,SoapFormatter等使用。
DataContractSerializer相對較新,可以支持使用SerializableAttribute定義其序列化能力的對象,但這不是必需的。如果您只是使用DataContractSerializer序列化對象,那麼只需使用數據協定屬性即可。
顯然,標記爲可序列化的成員也必須是可序列化的類型。請參閱Types Supported by the Data Contract Serializer。
因此,DataContract屬性看起來像是告訴它首先使用DataContractSerializer。 – AlvinfromDiaspar 2010-12-16 17:11:04
@Alvin:不,數據合約序列化程序是默認的。 – 2010-12-16 19:32:09
只需添加到此,DataContractSerializer支持的遠不止DataContract類型。看到這篇出色的博客文章,詳細介紹了DataContractSerializer支持的整個類型範圍:http://blogs.msdn.com/b/sowmy/archive/2006/02/22/536747.aspx
因此,從一個WCF方法內,我可以返回一個DataContract類型的對象,而無需在返回時在xml中手動序列化?換句話說,我可以簡單地返回DataContract對象,它將被xml序列化,對吧? – AlvinfromDiaspar 2010-12-16 17:26:55
@Alvin:沒錯。我建議你在Visual Studio中創建一個新的WCF服務,並查看它創建的代碼。它完全是這樣。 – 2010-12-16 19:31:51