3

そのため、おそらく不適切な形式であると思われるいくつかの XML ファイルを使用しており、XmlSerializer を使用してこの XML を論理ビジネス オブジェクトに逆シリアル化する方法と方法を理解しようとしています。次の XML ファイルがあるとします。

<Root>
   <ArrayType1 Name="Bob"/>
   <ArrayType1 Name="Jim"/>
   <ArrayType2 Name="Frank">
      <SubItem Value="4"/>
   </ArrayType2>
   <ArrayType2 Name="Jimbo">
      <SubItem Value="2"/>
   </ArrayType2>
</Root>

ここで、Root、ArrayType1、および ArrayType2 の 3 つのタイプを持つクラスを作成したいと考えていますが、Root で 2 つのリストを取得したいと考えています。1 つは ArrayType1 項目のコレクションを含み、もう 1 つは ArrayType2 項目のコレクションを含みますしかし、これらのアイテムには何らかのルートが必要なようです。たとえば、次のものをうまくデシリアライズする方法を知っています。

<Root>
   <ArrayType1Collection>
      <ArrayType1 Name="Bob"/>
      <ArrayType1 Name="Jim"/>
   </ArrayType1Collection>
   <ArrayType2Collection>
      <ArrayType2 Name="Frank">
         <SubItem Value="4"/>
      </ArrayType2>
      <ArrayType2 Name="Jimbo">
         <SubItem Value="2"/>
      </ArrayType2>
   </ArrayType2Collection>
</Root>

しかし、ArrayType# 要素を親の ArrayType#Collection 要素で囲むことなく、これをどのようにデシリアライズするのでしょうか?

XMLシリアライザーはこれを許可しますか?

4

1 に答える 1

11

それだけではありません:

[Serializable]
public class Root {
    [XmlElement("ArrayType1")]
    public List<ArrayType1> ArrayType1 {get;set;}

    [XmlElement("ArrayType2")]
    public List<ArrayType2> ArrayType2 {get;set;}
}

?

または、xml をファイル ("foo.xml") に入れて、次を使用します。

xsd foo.xml
xsd foo.xsd /classes

生成された foo.cs を見てください

于 2009-02-10T22:22:20.363 に答える