如何在XML序列化时更改自定义类集合的名称?

时间:2010-08-01 17:12:42

标签: c# xml xml-serialization

我正在序列化一个类的List,我对生成的XML输出不满意。

[Serializable()]
public class Foo
{

    [XmlAttribute]
    public String Property1 { get; set; }

    public Foo() { }
}

public class Foo2
{
   List<Foo> _list = new List<Foo>()
   {
      new Foo(){ Property1="hello"}
    };

   // ...
   // code for serialization
   string path = "asdasd";
   using (FileStream fs = new FileStream(path, FileMode.Create))
   {
     XmlSerializer xs = new XmlSerializer(typeof(List<Foo>));
     xs.Serialize(fs, _list);
     fs.Close();
   }
}

输出结果为:

<?xml version="1.0"?>
<ArrayOfFoo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Foo Property1="hello" />
</ArrayOfFoo>

我必须在哪里设置哪个属性来改变 ArrayOfFoo 的名称?

1 个答案:

答案 0 :(得分:2)

只需使用proper constructor

var xs = new XmlSerializer(typeof(List<Foo>), new XmlRootAttribute("foos"));

您也可以安全地从[Serializable]课程中删除Foo属性。这用于二进制序列化,XmlSerializer忽略。