C#Advanced XML Serializer,不需要域对象污染

时间:2009-10-28 22:23:29

标签: c# xml-serialization domain-driven-design poco

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

2 个答案:

答案 0 :(得分:5)

好吧,首先定义“高级”,即XmlSerializer没有的具体。就POCO而言,XmlSerializer有一个重载的ctor,它接受你 想要添加的所有属性,以避免必须将它们添加到你的对象模型中 - 但它仍然需要一个public parameterless constructor,仅适用于公共读/写字段/属性。如果使用这种方法,你应该缓存/重新使用序列化器。

我不知道有任何类似的选择,只是因为在大多数情况下这是“足够好” - 并且尝试将现有域对象暴力破解为DTO通常是错误的。简单地将您的域实体映射到 归属的新DTO(并且具有适当的ctor / properties / etc)可能更简单,更易于维护。

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

答案 1 :(得分:0)

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

XmlSerializer几乎总是人们想要的,他们只是不知道它实际上是如此灵活。