XmlSerializer:XSD生成了类序列化问题

时间:2016-03-01 09:15:24

标签: .net xsd xml-serialization generated-code

请考虑以下情形。我们有一个XSD文件定义了一个技术文档交换格式(一个根类型由几个complexTypes组成)。
另外,有一个规范定义了具有值范围和格式的每个字段。

显然,这两个文件都是由不同的部门创建的,因为格式的定义不同。 E.g。

  • XSD :时间由xml类型时间XmlSerializer格式: HH:mm:ss.fff )< / LI>
  • 规范文档:时间必须使用以下格式 HH:mm

技术方面,事情很容易。我们使用 XSD.exe 来生成类。但是现在使用XmlSerializer后输出文件看起来有所不同。没有机会协商格式,因为它是由于监管影响整个市场而创建的,因此影响了许多交易对手。

根据我们必须假设的那一刻,需要遵守规范文档的格式。所以我一直在寻找确保这一点的选择。

  1. 为受影响的IXmlSerializable生成的类添加并实施complexTypes接口。
    不幸的是,自{{}初始化以来,这不是一个选项。 1}}抛出异常:&#34;有一个反映类型的错误。&#34;
    或者有什么方法可以避免这种情况吗?实现根类型的接口不是一种选择,因为它非常庞大和复杂。
  2. 查找序列化库,其中可以提供某种类型的格式映射,以便可以在字段中实现自定义格式。
    现在,我没有找到这样的东西。但也许有人可以给我提示。
  3. 序列化后通过XmlSerializer修改节点的字符串内容。
    不是最好的方法,但它可以完成这项工作。
  4. 直接在生成输出中修改生成的类并添加一些代理属性。
    实际上不是最好的主意,因为重新生成(由于新版本的XSD文件)覆盖所有修改。遗憾的是,无法在XPathNavigator中重新定义属性,对吧?
  5. 我按优先顺序排列了列表。

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

    我知道它不是典型的我如何使用class xyz 的问题,但我仍然希望你可以给我提示,这种情况是怎样的经常处理。

1 个答案:

答案 0 :(得分:0)

由于反馈强烈,我决定选择选项3.

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

有关详细信息,请参阅MSDN中的article。流程非常简单。

  1. 选择具有给定路径的节点
  2. 读取值无类型(字符串)并解析预期类型对象
  3. 使用所需格式
  4. 从类型化对象中写入无类型值

    我们已经测试了它,它的工作就像一个魅力。