.net XmlSerializer:XSD生成的类序列化问题
考虑以下场景。我们有一个XSD文件,它定义了一种技术文档交换格式(一个根类型由几个.net XmlSerializer:XSD生成的类序列化问题,.net,xsd,xml-serialization,generated-code,.net,Xsd,Xml Serialization,Generated Code,考虑以下场景。我们有一个XSD文件,它定义了一种技术文档交换格式(一个根类型由几个复杂类型组成)。 此外,还有一个规范定义了每个字段的值范围和格式 显然,这两个文档都是由不同的部门创建的,因为格式的定义不同。例如 XSD:时间由xml类型的时间表示(XmlSerializer格式:HH:mm:ss.fff) 规范文件:时间HH:mm必须使用以下格式 从技术上讲,事情很简单。我们使用XSD.exe生成类。但是现在,使用XmlSerializer后,输出文件看起来不同了。没有机会协商该格式,因为
复杂类型组成)。
此外,还有一个规范定义了每个字段的值范围和格式
显然,这两个文档都是由不同的部门创建的,因为格式的定义不同。例如
- XSD:时间由xml类型的时间表示(
XmlSerializer
格式:HH:mm:ss.fff)
- 规范文件:时间HH:mm必须使用以下格式
从技术上讲,事情很简单。我们使用XSD.exe生成类。但是现在,使用XmlSerializer
后,输出文件看起来不同了。没有机会协商该格式,因为它是由于一项影响整个市场以及许多交易对手的法规而创建的
现在我们必须假设,规范文档的格式需要得到尊重。所以我在寻找确保这一点的方法
将IXmlSerializable
接口添加并实现到受影响的complexTypes
的生成类。不幸的是,这不是一个选项,因为XmlSerializer
的初始化引发异常:“存在反映类型的错误。”
或者有什么方法可以避免这种情况?实现根类型的接口不是一个选项,因为它非常大和复杂
找到一个序列化库,其中可以提供某种类型的格式映射,以便在字段中实现自定义格式<现在,我没有找到这样的东西。但也许有人能给我一个暗示
在序列化之后通过XPathNavigator
修改节点的字符串内容。
这不是最好的方法,但它可以完成这项工作
直接在生成输出中修改生成的类并添加一些代理属性。
实际上不是最好的主意,因为重新生成(由于XSD文件的新版本)会覆盖所有修改。不幸的是,属性不能在分部类中重新定义,对吗
我已经按优先顺序排列了这个名单
那么我是否错过了一个选择?你会走哪条路
我知道这不是典型的“如何使用xyz类”问题,但我仍然希望,您能给我一些提示,说明这种情况通常是如何处理的。由于大量反馈,我决定选择选项3
原因很简单。我们仍然可以使用XSD.exe生成标准类,并保留XmlSerializer
类的所有优点
有关更多信息,请参阅MSDN中的。水流很顺直
选择具有给定路径的节点
读取非类型化的值(字符串)并分析预期的类型化对象
使用所需格式从类型化对象写入非类型化值
我们已经对它进行了测试,它的效果非常好