【问题标题】:How to set root node name when XmlSerializing an array?如何在 Xml 序列化数组中设置根节点名称?
【发布时间】:2009-11-23 15:12:27
【问题描述】:

我有一个要序列化为 XML 的对象数组。这些对象被注释为设置 XML 节点名称,但我想知道如何设置 XML 根节点的名称。

代码如下所示:

// create list of items
List<ListItem> list = new List<ListItem>();
list.Add(new ListItem("A1", new Location(1, 2)));
list.Add(new ListItem("A2", new Location(2, 3)));
list.Add(new ListItem("A3", new Location(3, 4)));
list.Add(new ListItem("A4<&xyz>", new Location()));

// serialise
XmlSerializer ser = new XmlSerializer(typeof(ListItem[]));
FileStream os = new FileStream(@"d:\temp\seri.xml", FileMode.Create);
ser.Serialize(os, list.ToArray());
os.Close();

输出如下:

<?xml version="1.0"?>
<ArrayOfPlace xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Place>
    <Placename>A1</Placename>
    <Location>
      <Lat>1</Lat>
      <Long>2</Long>
    </Location>
  </Place>
  <Place>
  ...

ListItem 已使用 XmlElement 注释重命名为 Place,但是如何设置根节点的名称以重命名 'ArrayOfPlace' 节点?

【问题讨论】:

    标签: .net xml-serialization root


    【解决方案1】:

    试试这个:

    XmlSerializer ser = new XmlSerializer(
        typeof(ListItem[]), 
        new XmlRootAttribute("CustomRootName"));
    

    【讨论】:

    【解决方案2】:

    使用XmlRoot 属性。

    【讨论】:

      【解决方案3】:

      我自己也找到了解决方案。

      实例化XmlSerializer时可以设置根节点的名称。见下文。

      XmlSerializer ser = new XmlSerializer(typeof(ListItem[]), new XmlRootAttribute("AllPlaces"));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-24
        • 1970-01-01
        • 1970-01-01
        • 2019-11-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多