是否有任何封閉或開放源碼項目爲C#中的XML序列化可以序列化在大多數情況下的任何對象,而無需污染我的域對象與噸屬性?那也將處理使用內部泛型類構建的集合的序列化?一個好處是它可以處理序列化接口類型的屬性。另一個好處是,它可以(註明內部get訪問或至少)C#高級XML序列化,不需要域對象的污染
3
A
回答
5
那麼序列化具有隻讀屬性的對象,首先定義「高級」,即什麼專門你需要一個XmlSerializer
不有。在POCO方面,XmlSerializer
一個重載的構造函數,它接受所有你能曾經要添加,以避免將它們添加到您的對象模型的屬性 - 但它仍然需要一個公共的無參數的構造函數,並且僅適用於公共讀/寫字段/屬性。如果你使用這種方法,你應該緩存/重新使用序列化程序。
我不知道有任何類似的替代品,只是因爲在大多數情況下,這是「足夠好」 - 而這往往是一個錯誤的嘗試暴力破解現有的域對象到DTO。這可能是更簡單,更易於維護簡單域實體映射到一個新的DTO(s)表示是歸因(並有適當的構造函數/屬性/等)。
注意,對於構造函數/屬性發出DataContractSerializer
有一些答案,但這並沒有對什麼XML是什麼樣子儘可能多的細粒度控制。
+0
我認爲污染物體的路線可能是最好的答案,因爲我已經瞭解到AutoMapper應該能夠用零代碼完成大部分翻譯。 – 2009-11-12 21:06:19
0
- 您可以通過使用InternalsVisibleToAttribute來允許System.Xml.dll訪問您的內部。 從而序列化內部類型和/或內部成員。包括內部的.ctors。
- 您也可以實現IXmlSerializable的類上定製自己的序列化(如含容器接口引用)。
- 你不必提供有關你的類XML序列化的屬性,而是將它們作爲XmlAttributeOverrides代替。
XmlSerializer幾乎總是人們想要的,他們只是不知道它是如此靈活。
相關問題
- 1. XML序列化 - 渲染對象列表直屬根 - 的Xml - 元
- 2. 將XML反序列化爲對象(需要返回對象列表)
- 3. 驗證序列化對象,而該領域需要驗證
- 4. C#將XML反序列化爲對象
- 5. 反序列化XML到對象在C#
- 6. C#Xml反序列化嵌套對象
- 7. 反序列化XML到C#對象
- 8. 將XML反序列化爲C#對象
- 9. 序列化對象到XML元素(C#)
- 10. C#反序列化XML到對象
- 11. 將XML反序列化爲C#對象
- 12. XML序列化:對象未序列化
- 13. 需要在C++中的對象序列化庫的建議
- 14. 污染班級的環境
- 15. 爲什麼序列化對象需要序列化
- 16. C#:無需反射即可將對象序列化爲XML
- 17. Android XML對象序列化
- 18. Xml序列化對象(HttpBrowserCapabilities)
- 19. XML對象序列化
- 20. 序列化對象到XML
- 21. 將方法添加到已序列化的對象,但不需要序列化
- 22. 需要將以下json轉換(反序列化)爲C#對象
- 23. 多態XML序列化/反序列化到C#對象的不同節點
- 24. 關於對象序列化的c#對象xml
- 25. 序列化C#對象,想要反序列化到接口
- 26. 反序列化XML以反對在C列表中的對象#
- 27. 在C#序列化我需要序列化對象其中一個引用對象的DLL
- 28. 對象序列化要求
- 29. 反序列化XML到C#對象,並以不同的方式
- 30. 反序列化XML在C#中的對象XmlRoot不工作
如果您沒有找到XML,請查看JSON.NET。 http://www.codeplex.com/Json – Klinger 2009-10-28 22:29:57
我曾經想過,因爲我知道有很多JSON序列化程序存在,可能可以做我想做的事情,但是我需要xml來執行XSLT編譯轉換(文檔生成),並且我不會想想要轉換JSON是一種可行的方式 – 2009-10-28 23:07:21
默認的XMLSerializer是一個不錯的選擇。它只需要屬性來改變它的默認行爲。在我工作的公司中,我們序列化了大量複雜的對象,但沒有放置單個屬性,因爲我們對輸出沒有興趣。實際上,任何其他序列化程序也會要求你放置屬性來改變行爲。 – 2009-10-28 23:49:05