Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net XmlSerializer:XSD生成的类序列化问题_.net_Xsd_Xml Serialization_Generated Code - Fatal编程技术网

.net XmlSerializer: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文件,它定义了一种技术文档交换格式(一个根类型由几个
复杂类型组成)。

此外,还有一个规范定义了每个字段的值范围和格式

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

  • XSD:时间由xml类型的时间表示(
    XmlSerializer
    格式:HH:mm:ss.fff)
  • 规范文件:时间HH:mm必须使用以下格式
从技术上讲,事情很简单。我们使用XSD.exe生成类。但是现在,使用
XmlSerializer
后,输出文件看起来不同了。没有机会协商该格式,因为它是由于一项影响整个市场以及许多交易对手的法规而创建的

现在我们必须假设,规范文档的格式需要得到尊重。所以我在寻找确保这一点的方法

  • IXmlSerializable
    接口添加并实现到受影响的
    complexTypes

    的生成类。不幸的是,这不是一个选项,因为
    XmlSerializer
    的初始化引发异常:“存在反映类型的错误。”
    或者有什么方法可以避免这种情况?实现根类型的接口不是一个选项,因为它非常大和复杂
  • 找到一个序列化库,其中可以提供某种类型的格式映射,以便在字段中实现自定义格式<现在,我没有找到这样的东西。但也许有人能给我一个暗示
  • 在序列化之后通过
    XPathNavigator
    修改节点的字符串内容。

    这不是最好的方法,但它可以完成这项工作
  • 直接在生成输出中修改生成的类并添加一些代理属性。
    实际上不是最好的主意,因为重新生成(由于XSD文件的新版本)会覆盖所有修改。不幸的是,属性不能在
    分部类中重新定义,对吗
  • 我已经按优先顺序排列了这个名单

    那么我是否错过了一个选择?你会走哪条路


    我知道这不是典型的“如何使用xyz类”问题,但我仍然希望,您能给我一些提示,说明这种情况通常是如何处理的。

    由于大量反馈,我决定选择选项3

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

    有关更多信息,请参阅MSDN中的。水流很顺直

  • 选择具有给定路径的节点
  • 读取非类型化的值(字符串)并分析预期的类型化对象
  • 使用所需格式从类型化对象写入非类型化值
  • 我们已经对它进行了测试,它的效果非常好