是否有任何封闭或开放源码项目为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. 验证序列化对象,而该领域需要验证
- 2. XML序列化:对象未序列化
- 3. 将XML反序列化为C#对象
- 4. 将XML反序列化为C#对象
- 5. 反序列化XML到对象在C#
- 6. C#反序列化XML到对象
- 7. 需要在C++中的对象序列化库的建议
- 8. 污染班级的环境
- 9. 为什么序列化对象需要序列化
- 10. Xml序列化对象(HttpBrowserCapabilities)
- 11. 序列化对象到XML
- 12. Android XML对象序列化
- 13. 多态XML序列化/反序列化到C#对象的不同节点
- 14. 需要将以下json转换(反序列化)为C#对象
- 15. 反序列化XML以反对在C列表中的对象#
- 16. 在C#序列化我需要序列化对象其中一个引用对象的DLL
- 17. 反序列化XML到C#对象,并以不同的方式
- 18. 反序列化XML在C#中的对象XmlRoot不工作
- 19. C#反序列化Xml到对象并再次序列化回到Xml
- 20. 序列化对象到XML和XML
- 21. XML包含对象列表的对象的序列化列表
- 22. 反序列化的XML对象在C#中的列表
- 23. 我需要序列化的XML文件在C#
- 24. C++对象序列化
- 25. 的XML C#XML序列化
- 26. 将Javascript对象转换为Json对象而不需要序列化
- 27. XML序列化讨厌的对象
- 28. Linq-to-Sql对象的XML序列化?
- 29. 继承对象的XML反序列化
- 30. 赢RT反序列化的XML对象
如果您没有找到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