使用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>
我很感激为什么反序列化无法检索所有元素的任何建议。