3

是否有任何用于 C# 的 XML 序列化程序的封闭或开源项目可以序列化大部分对象,而无需用大量属性污染我的域对象?这也将处理使用内部泛型类构建的集合的序列化?一个好处是它可以处理接口类型属性的序列化。另一个好处是它可以序列化具有只读属性的对象(或至少带有标记为内部的 get 访问器)

4

2 回答 2

5

好吧,首先定义“高级”,即您具体需要什么XmlSerializer而没有。就 POCO 而言,它有一个XmlSerializer重载的 ctor,它接受您可能想要添加的所有属性,以避免将它们添加到您的对象模型中 - 但它仍然需要一个公共无参数构造函数,并且仅适用于公共读/写字段/属性。如果您使用这种方法,您应该缓存/重用序列化程序。

我不知道任何类似的替代方案,仅仅是因为在大多数情况下这“足够好” - 尝试将现有域对象强制转换为 DTO 通常是错误的。将您的域实体简单地映射到新的 DTO 上可能更简单且更易于维护,这些 DTO具有属性(并具有适当的 ctor/properties/etc)。

请注意,对于 ctor/properties 问题DataContractSerializer一些答案,但这对 xml 的外观没有那么细粒度的控制。

于 2009-10-29T05:18:49.300 回答
0
  • 您可以使用 InternalsVisibleToAttribute 允许 System.Xml.dll 访问您的内部。从而序列化内部类型和/或内部成员。包括内部 .ctors。
  • 您还可以在类上实现 IXmlSerializable 以自定义它们的序列化(如包含接口引用的容器)。
  • 您不必在类上提供 XML 序列化属性,而是将它们作为 XmlAttributeOverrides 提供。

XmlSerializer 几乎总是人们想要的,他们只是不知道它是否像实际那样灵活。

于 2009-10-29T05:39:29.493 回答