このような .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 Studio の xsd.exe によって自動生成されました。次に、xsd2code を使用して .designer.cs ファイルにします。xsd2code を設定して、シリアライザーを作成し、複雑な型構造を配列に作成します。
ここで、xml をデシリアライズしてシーンファイルを作成します。maxoccurence=1 および minoccurence=0 に設定されている限り、サブオブジェクトがあっても、playername などのサブオブジェクトはすべて正しいです。上記の例のボタンのような配列を除いて、次のような配列を取得すると思いました: 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>