2012-01-03 5 views
1
using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Diagnostics; 
using System.IO; 
using System.Xml; 
using System.Xml.Linq; 
using System.Xml.Serialization; 
using System.Linq; 

namespace Serialize 
{  
    public class Good 
    { 
     public int a; 
     public Good() {} 

     public Good(int x) 
     { 
      a = x; 
     } 
    } 

    public class Hello 
    { 
     public int x; 
     public List<Good> goods = new List<Good>(); 

     public Hello() 
     { 
      goods.Add(new Good(1)); 
      goods.Add(new Good(2)); 
     } 
    } 

    [XmlRootAttribute("Component", IsNullable = false)] 
    public class Component { 
     //[XmlElement("worlds_wola", IsNullable = false)] 
     public List<Hello> worlds;  

     public Component() 
     { 
      worlds = new List<Hello>() {new Hello(), new Hello()}; 
     } 
    } 

    class Cov2xml 
    { 
     static void Main(string[] args) 
     { 
      string xmlFileName = "ip-xact.xml"; 
      Component comp = new Component(); 

      TextWriter writeFileStream = new StreamWriter(xmlFileName); 

      var ser = new XmlSerializer(typeof(Component)); 
      ser.Serialize(writeFileStream, comp); 
      writeFileStream.Close(); 

     } 
    } 
} 

このXmlSerializerコードでは、このXMLファイルを取得します。XmlElementの有無にかかわらずXmlSerializerの動作が異なります

enter image description here

私は2つのHello要素を持っている唯一の "世界" の要素を、持っています。

しかし、私はworldのvaribaleの前にXmlElementを追加します。

[XmlElement("worlds_wola", IsNullable = false)] 
public List<Hello> worlds 

私には1つではなく2つのworlds_wola要素があります。

enter image description here

これはなぜでしょうか? XmlElementを使用してタグの名前を指定するにはどうすればよいですか?次のように1つの "worlds_wola"要素のみを使用しますか?

<worlds_wola> 
    <Hello> 
    ... 
    </Hello> 
    <Hello> 
    ... 
    </Hello> 
</worlds_wola> 
+0

WAGを得ることができます:代わりにXmlArrayAttributeを使用してみてください。 – Will

答えて

3

XmlElementAttributeではなく、コレクションにXmlArrayAttributeを使用する必要があります。

0

これは私がチャールズの答えに基づいて欲しかったものであることがわかりました。

この設定で
[XmlArray("fileSet")] 
[XmlArrayItem(ElementName = "file", IsNullable = false)] 
public List<Hello> worlds; 

、私は

<fileSet> 
    <file>...</file> 

代わりの

<worlds> 
    <Hello>...</Hello> 
関連する問題