【发布时间】:2016-03-01 09:15:24
【问题描述】:
考虑以下场景。我们有一个定义技术文档交换格式的 XSD 文件(一个根类型由多个 complexTypes 组成)。
此外,还有一个规范定义了每个字段的值范围和格式。
显然,这两个文档都是由不同部门创建的,因为格式的定义不同。例如
-
XSD:时间用xml类型表示time(
XmlSerializer格式:HH:mm:ss.fff) - 规范文档:时间必须使用以下格式HH:mm。
技术上,事情很简单。我们使用 XSD.exe 来生成类。但是现在使用XmlSerializer 后输出文件看起来不同了。没有机会协商格式,因为它是由于影响整个市场的法规而创建的,因此影响了很多交易对手。
目前我们必须假设,规范文档的格式需要得到尊重。所以我一直在寻找确保这一点的选项。
-
在受影响的
complexTypes的生成类中添加并实现IXmlSerializable接口。
不幸的是,这不是一个选项,因为XmlSerializer的初始化会引发异常:“反映类型时出现错误。”
或者有什么办法可以避免这种情况?为根类型实现接口不是一种选择,因为它非常庞大且复杂。 -
找到一个可以提供某种类型格式映射的序列化库,这样就可以在字段中实现自定义格式。
现在,我没有找到类似的东西。但也许有人可以给我提示。 -
在序列化后通过
XPathNavigator修改节点的字符串内容。
不是最好的方法,但它可以完成这项工作。 -
直接在生成输出中修改生成的类并添加一些代理属性。
实际上不是最好的主意,因为重新生成(由于 XSD 文件的新版本)会覆盖所有修改。不幸的是,属性不能在partial class中重新定义,对吧?
我已按优先顺序对列表进行了排序。
所以我错过了一个选项吗?你会走哪条路?
我知道这不是典型的 How do I use class xyz 问题,但我仍然希望您能给我提示,通常如何处理这种情况。
【问题讨论】:
标签: .net xsd xml-serialization generated-code