1

使用 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>

对于反序列化为何无法检索所有元素的任何建议,我将不胜感激。

4

0 回答 0