代码之家  ›  专栏  ›  技术社区  ›  citronas

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

  •  1
  • citronas  · 技术社区  · 15 年前

    我正在序列化一个类的列表,我对生成的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>
    

    我必须在哪里设置要更改其名称的属性 阿列奥福 ?

    1 回复  |  直到 11 年前
        1
  •  2
  •   Darin Dimitrov    15 年前

    只使用 proper constructor :

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

    此外,您还可以安全地移除 [Serializable] 属性来自 Foo 班级。这是用于二进制序列化和 XmlSerializer 忽视。