【问题标题】:What serializer to use?使用什么序列化程序?
【发布时间】:2013-05-17 22:44:55
【问题描述】:

我使用的是 DataContractSerializer,到目前为止它提供了我需要的一切。 现在我需要另外两个功能,而且我已经知道 DataContractSerializer 无法实现这些功能。

  1. 我需要能够将某些字段序列化为 XmlComments
  2. 某些成员应直接序列化为包含对象中的 Xml-Attribute。

XmlSerializer 既不支持 opt-in,也不支持我需要的字段/私有,所以很遗憾,这是不可能的。

在使用 DataContractSerializer 作为基础时,我能否以某种方式制作我自己的序列化程序,以尊重现有的“XmlAttribute”-Attribute 和我的自定义“XmlComment”-Attribute?

也许已经有一个第三方序列化程序可以提供我需要的东西?不过没找到。

我不介意编写自定义序列化程序,但我想尽可能多地重用现有代码。

【问题讨论】:

  • “XmlSerializer 既不支持选择加入也不支持字段/私有” -> 为什么不能将字段/私有公开为公共属性?
  • 我在这个上有循环代码。您应该创建一个完全独立的数据模型对象,其唯一目的是 data 的序列化/反序列化。将该数据模型单独转换为您的业务对象/从您的业务对象转换。您的业​​务对象可以通过这种方式维护其私有字段/实现,并且您的数据模型对象可以专注于公共属性或各种 XML 属性修饰以满足您需要的架构。
  • @ChrisSinclair 虽然他不想使用 XML cmets...即使是专为序列化设计的 DTO,也需要一些自定义序列化。

标签: c# serialization reflection attributes datacontractserializer


【解决方案1】:

您可以使用 XmlSerializer。您只需要在默认规则无法处理的对象上实现IXmlSerializable 并自己完成繁重的工作。这仍然比滚动您自己的序列化程序 IMO 更简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 2012-06-12
    • 1970-01-01
    • 2018-11-24
    • 2013-05-26
    相关资源
    最近更新 更多