有沒有什麼辦法可以讓WCF在返回時序列化整個類?我是否必須將DataMember添加到每個屬性?DataContracts和DataMembers
回答
由於.NET 3.5 SP1,你不必再這樣做。
如果您沒有任何[DataContract]
和[DataMember]
屬性,則DataContractSerializer類的行爲將與舊的XmlSerializer類似:它將序列化類中列出的所有公共讀/寫屬性。
你失去在這個過程中的幾件事情,但:
,因爲你沒有
[DataMember]
屬性,你不能再定義字段的順序 - 他們會在順序串行化外觀不能省略的公共屬性(因爲這將要求對所有其他屬性/領域
[DataMember]
)是你不能定義一個屬性(這將是對
[DataMember]
屬性再次)類現在需要有一個公共的,無參數的構造函數(通常不需要數據合同)
讀all about it in detail亞倫Skonnard在Pluralsight。
我愛marc的答案,但我想添加一些更多的信息。
DataContractSerializer和DataContractJsonSerializer都支持開箱即用的許多其他序列化模型。這包括IXmlSerializable,Serializable和ISerializable。 POCO支持在.NET 3.5 SP1中添加,但支持這些其他模型一直存在,因爲.NET 3
This blog post詳細說明了支持的範圍,更重要的是,序列化程序對不同模型的優先級(即,它告訴你如果你有一個類型裝飾有多個序列化模型,那麼基於DataContract的序列化器將會執行什麼操作)
因此,如果您閱讀該博客文章,您會注意到POCO支持是優先級列表中的最後一個。如果沒有其他序列化編程模型可用於其父類型或,則是串行器的最後手段。例如,如果該類型是某種枚舉類型,則它將根據traditional collection rules進行序列化。如果它是ISerializable或者Serializable,它將根據序列化規則進行序列化。
另一個重要的區別是:在所有其他類型的反序列化過程中,從不調用默認的零參數構造函數。對於POCO類型,它總是被稱爲!這給你一個額外的鉤子,你在其他序列化模型中沒有那麼容易!
- 1. WCF DataContracts和Polymorphism
- 2. 具有DataContract和DataMembers的TypeBuilder
- 3. 將生成的代碼(wsdl生成)作爲DataContracts和DataMembers添加到另一個WCF服務
- 4. C#序列化和DataContracts
- 5. 枚舉,DataContracts和WCF問題
- 6. 與DataContracts
- 7. 繼承datacontracts
- 8. 共享DataContracts
- 9. DataGridView,BindingSources,DataMembers - 我不明白
- 10. 往返DataContracts和Denial服務攻擊
- 11. 需要在WCF中分離DataContracts和ServiceContract
- 12. WCF DataContracts中的INotifyPropertyChanged
- 13. 如何使用DataContracts
- 14. datacontracts並不等同
- 15. 對DataContracts執行Restritions
- 16. 鏈接列表不保存datamembers
- 17. WCF的Business Objects或DataContracts
- 18. WCF Rest多重DataContracts包裝
- 19. WCF DataContracts的重新定位
- 20. DataContracts如何工作? - Deserialize Json
- 21. 什麼是WCF中的DataContracts?
- 22. WCF/REST返回組,修復datacontracts和數據成員
- 23. 如何避免的XSD的BizTalk消息和WCF服務datacontracts
- 24. 序列化/反序列化DataContracts列表
- 25. 哪一層應該有我的DataContracts?
- 26. 在WCF服務中使用Stream或DataContracts?
- 27. 在WCF的DataContracts上傳遞屬性
- 28. 支持.Net 2.0庫中的DataContracts
- 29. Datacontracts屬性獲取器運行兩次
- 30. 使用SVCUTIL.EXE爲NOAA生成DataContracts Forcast
+1 - 這是我的新聞,它不應該。 :) – razlebe 2011-04-15 20:13:35
@razlebe:這是微軟對懶惰程序員的投訴進行的投訴:-)(至少這就是Juval Lowy所說的) – 2011-04-15 20:14:45