【发布时间】:2011-08-08 12:58:42
【问题描述】:
我已经使用 xsd 工具从一些 xml 方案生成了一个 cs 类。
该方案是从 uml 类描述生成的非常复杂的方案。
现在我编写了一个简单的测试来确保生成的 xsd 类的功能。
测试使用XmlSerializer 创建 xml 文件。
在我的 XSD 方案中,有一些强制性元素(通过 xsd-default 定义为 minocc=1 和 maxocc=1)。
例如(简体):
<xs:element name="order">
<xs:complexType>
...
<xs:element name="orderId" type="string"/>
<xs:element name="material" type="Material"/>
...
<xs:complexType>
Material 是一个复杂的类型,它由几个元素组成。这是秩序的一部分。
这些元素应该始终存在于生成的 xml 文件中,即使它们是空的或仅包含空元素。现在,如果我将类实例序列化为 xml 文件,则只有元素出现在类属性包含值的位置。如果我设置 orderId,则会出现 orderId-element,但不会出现 material-element,因为在我的类实例中它为空。因此,我的 xml 文件对 xsd 架构无效。
您知道如何在序列化过程中使用我的 xsd 文件验证生成的 xml 文件吗?有没有办法告诉XmlSerializer 它应该始终生成强制性元素(可能带有默认值)?
或者有没有办法验证应该序列化的类实例的结构?
【问题讨论】:
-
您总是可以提供非
null值吗? -
我遇到的问题是,xsd-schema 和生成的类结构非常复杂,我不想设置所有不需要的属性。
-
但 xsd 肯定会告诉你他们是需要...
-
是的,没错,但即使我从我的 xsd 文件创建了 c# 类,序列化也不符合它
-
IIRC XmlReader 和 XmlWriter 都支持针对 xsd 的验证
标签: c# xml serialization xsd xmlserializer