递归XmlSerializer丢失元素

时间:2012-10-12 18:43:24

标签: xmlserializer

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

我很感激为什么反序列化无法检索所有元素的任何建议。

0 个答案:

没有答案