2011-06-26 12 views
4

type = arrayのXML文書をルートノードとしてde/serializeしたいと思います。 与えられたXML構造は次のようになります。結果のXML出力がこれですXmlSerialization in C# - ルート要素配列

[XmlRootAttribute("parties", Namespace = "", IsNullable = false)]  
public class Parties 
{ 
    private ArrayList contacts = new ArrayList(); 


    public Parties() 
    { 

    } 


    [XmlArray("parties"), XmlArrayItem("party", typeof(Person))] 
    public ArrayList Contacts 
    { 
     get { return contacts; } 
     set { contacts = value; } 
    } 
} 

<?xml version="1.0" encoding="UTF-8"?> 
    <parties type="array"> 
     <party type="Person"> 
      <id>1</id> 
      <lastname>Smith</lastname> 
      <firstname>Peter</firstname> 
      ... 
     </party> 
     <party type="Person"> 
      <id>2</id> 
      <lastname>Smith</lastname> 
      <firstname>Sarah</firstname> 
      ... 
     </party> 
    <parties type="array"> 

C#のコードのようになります

<?xml version="1.0" encoding="utf-8"?> 
    <parties xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
     <parties> 
      <party> 
       <id>0</id> 
       <lastname>Smith</last-name> 
       <firstname>Peter</first-name> 
      </party> 
     </parties> 
    </parties> 

問題は、私は2を持っているということです今、 ルート要素の配列タイプを指定するにはどうすればよいですか?任意のアイデアをどのように指定されたXMLスキーマを変更せずにそれを修正するには?

答えて

6

これを試してみてください:

[XmlElement("party")] 
public ArrayList Contacts 
{ 
    get { return contacts; } 
    set { contacts = value; } 
} 
+0

+1を。マイナーポイント - 値が正しく初期化されていれば 'get'だけ必要です。 –

+1

それは問題を解決しました。 @peterなら、これを答えとしてマークすることを検討してください。 –