2016-03-01 30 views
0

请考虑以下情形。我们有一个定义技术文档交换格式的XSD文件(一个根类型由几个complexTypes组成)。
此外,还有一个规范定义了每个字段的值范围和格式。XmlSerializer:XSD生成的类序列化问题

显然,两个文档都是由不同的部门创建的,因为格式的定义是不同的。例如。

  • XSD:时间是由XML类型表示时间XmlSerializer格式:HH:MM:SS.FFF
  • 规格文档:以下格式必须用于时间HH:mm

技术上讲,事情很简单。我们使用XSD.exe来生成类。但是现在输出文件在使用XmlSerializer后看起来不同。没有机会就格式进行谈判,因为它是由于影响整个市场的规则而产生的,因此也影响了很多交易对手。

正如我们必须假设的那样,规范文档的格式需要得到尊重。所以我一直在寻找可以确保这一点的选项。

  1. 添加和实现IXmlSerializable接口受影响complexTypes的生成的类。
    不幸的是,这不是一个选项,因为XmlSerializer的初始化引发了一个异常:“有反映类型的错误。”
    或者有什么办法可以避免这种情况?实现根类型的接口不是一种选择,因为它非常大且复杂。
  2. 找到一个序列化库,其中可以提供某种类型的格式映射,以便可以实现字段中的自定义格式。
    现在,我没有找到像这样的东西。但也许有人可以给我提示。
  3. 序列化后通过XPathNavigator修改节点的字符串内容。
    不是最好的方法,但它会完成这项工作。
  4. 在生成输出中直接修改生成的类并添加一些代理属性。
    实际上不是最好的想法,因为重新生成(由于新版本的XSD文件)会覆盖所有修改。不幸的是,属性不能在partial class中重新定义,对吧?

我已经按照首选项的顺序排列了列表。

所以我错过了一个选项?你会走哪条路?

我知道这不是典型的如何使用class xyz问题,但我仍然希望,你可以给我提示,通常如何处理这样的场景。

回答

0

由于巨大反馈,我决定去与选项3

原因很简单。我们仍然可以使用XSD.exe的标准类代,并保留XmlSerializer类的所有优点。

欲了解更多信息,请参阅MSDN中的article。流程非常简单。

  1. 给定的路径
  2. 读值无类型(串)选择节点,并使用所需的格式解析预期类型的​​对象
  3. 写类型化从类型对象值

我们已经测试了它已经和它的魅力一样。