使用 C# 和 .Net 4.0,我有一个递归 XSD 架构。基于 XSD 的 XML 可以使用 XmlSerializer 很好地序列化。它也反序列化没有错误,但没有检索所有元素。
这是来自 XSD 的片段:
<xs:complexType name="SettingGroup">
<xs:sequence>
<xs:element name="Name" type="xs:string" />
<xs:element name="Notes" type="xs:string" minOccurs="0" />
<xs:element name="SettingGroup" type="SettingGroup" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="Setting" type="Setting" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
请注意,SettingGroup 类型递归地包含 0 个或多个 SettingGroup 元素,以及 0 个或多个名为 Setting 的不同类型的元素。当 SettingGroup 仅包含 SettingGroups 或仅包含 Settings 时,它运行良好。但是,当 SettingGroup 同时具有 SettingGroups 和 Settings 时,尽管它按预期序列化,但在反序列化时,所有 Settings 元素都将丢失。
我也尝试过使用 ref,结果相似:
<xs:element ref="SettingGroup" minOccurs="0" maxOccurs="unbounded" />
我手动创建了 .xsd 文件,并使用 xsd.exe 创建了 C# 类。
如果它可能有用,这里是设置的定义:
<xs:complexType name="Setting">
<xs:sequence>
<xs:element name="Name" type="xs:string" />
<xs:element name="Notes" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="Roam" type="xs:boolean" minOccurs="0" default="true" />
<!--<xs:element name="RoamConditions" type="RoamConditions" />-->
<xs:element name="SettingLocation" type="SettingLocation" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
对于反序列化为何无法检索所有元素的任何建议,我将不胜感激。