0

私は次のようなクラスのリストを持っています

public class Root
{
 public List<Sensor> sensorList
 {
    get;set;
 }
}

このクラスをシリアル化する場合、XMLは次のようになります

<?xml version="1.0" encoding="us-ascii"?>
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <sensorList>
    <Sensor>
      <Channel>1</Channel>
    </Sensor>
    <Sensor>
      <Channel>2</Channel>
    </Sensor>
  </sensorList>
</Root>

しかし、私はこのようなxmlが必要です

<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Sensor>
      <Channel>1</Channel>
    </Sensor>
    <Sensor>
      <Channel>2</Channel>
    </Sensor>  
</Root>

リストを使用してこれをどのように達成できますか?

4

1 に答える 1

2

sensorListルートのプロパティにXmlElement 属性を追加すると、望ましい結果が得られます。以下のコードを確認してください。

class Program
{
    static void Main(String[] args)
    {
        Root temp = new Root();
        temp.sensorList = new List<Sensor>();
        temp.sensorList.Add(new Sensor() { Channel = "1"});
        temp.sensorList.Add(new Sensor() { Channel = "2" });

        XmlSerializer ser = new XmlSerializer(typeof(Root));
        XDocument mydoc = new XDocument();
        using (XmlWriter writer = mydoc.CreateWriter())
        {
            ser.Serialize(writer, temp);
        }

        Console.WriteLine(" After serialize :" + mydoc.ToString());

        using (XmlReader reader = mydoc.CreateReader())
        {
            Root newTemp = (Root)ser.Deserialize(reader);
            Console.WriteLine("After deserialize :" + newTemp.sensorList.Count);
        }
    }
}

public class Root
{
    [XmlElement(ElementName="Sensor")]
    public List<Sensor> sensorList
    {
        get;
        set;
    }
}


public class Sensor
{
    public string Channel;
}
于 2013-01-01T05:36:22.833 に答える