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

在对数组进行xml序列化时,如何设置根节点名?

  •  18
  • paul  · 技术社区  · 15 年前

    我有一个对象数组,希望将其序列化为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>
      ...
    

    李斯特 已重命名为 地点 使用一个 XML-元素 注释,但是如何设置根节点的名称以重命名 “广场” 节点?

    3 回复  |  直到 15 年前
        1
  •  28
  •   Darin Dimitrov    15 年前

    试试这个:

    XmlSerializer ser = new XmlSerializer(
        typeof(ListItem[]), 
        new XmlRootAttribute("CustomRootName"));
    
        2
  •  3
  •   Will    15 年前

    使用 XmlRoot 属性。

        3
  •  0
  •   paul    15 年前

    我自己也找到了解决办法。

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

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