我正在使用这样的 .xsd 架构
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="Scene">
<xs:complexType>
<xs:sequence>
<xs:element name="SceneName" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="PlayerName" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="Button" minOccurs="0" maxOccurs="unbounded" >
<xs:complexType>
<xs:sequence>
<xs:element name="ButtonText" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="NextScene" type="xs:string" minOccurs="0" maxOccurs="1" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="Scene" />
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
这是由 Visual Studios xsd.exe 自动生成的。然后我使用 xsd2code 使其成为 .designer.cs 文件。我设置了 xsd2code,以便它创建序列化程序并为数组创建复杂的类型结构。
现在我反序列化一个 xml 并创建我的场景文件,我的子对象(如 playername)都是正确的,即使它们有子对象,只要它们设置为 maxoccurence=1 和 minoccurence=0。除了上例中的 Button 之类的数组,我想我会得到一个像这样的数组:scene.Button[i].Buttontext。嗯,我不明白。我只是得到我不知道这就是为什么我在这里有一个截图。
他抛出一个 IndoexoutofRange 错误。那么我做错了什么?
顺便说一句,我的 example.xml
<?xml version="1.0" encoding="utf-8"?>
<Scene>
<SceneName>SceneName1</SceneName>
<PlayerName>PlayerName1</PlayerName>
<Button>
<ButtonText>ButtonText1</ButtonText>
<NextScene>NextScene1</NextScene>
</Button>