标准XML序列化,但省略父标记

本文关键字:XML 序列化 标准 | 更新日期: 2023-09-27 17:58:33

我尝试将以下代码序列化为XML格式:

public class FieldServers
{
    public List<FieldServer> FieldServer = new List<FieldServer>();
}
public class FieldServer
{
    [XmlAttribute("ID")]
    public string ID { get; set; }
    public List<Item> EntryPoints = new List<Item>();
}
public class Item
{
    [XmlAttribute("Name")]
    public string Name { get; set; }
    [XmlAttribute("Data")]
    public string Data { get; set; }
    [XmlAttribute("Type")]
    public string Type { get; set; }
}

使用上面的类结构,我可以生成一些像下面这样的数据:

<?xml version="1.0" encoding="utf-8"?>
<FieldServers>
  <FieldServer>
    <FieldServer ID="11">
      <EntryPoints>
         <Item Name="ItemName" Data="ItemData" Type="ItemType" />
      </EntryPoints>
    </FieldServer>
  </FieldServer>
</FieldServers>

有人能告诉我如何修改类序列化属性,使数据看起来与下面的类似吗?我试了一个小时都没有成功。如果我在类中保留List结构,这可能吗?

<?xml version="1.0" encoding="utf-8"?>
<FieldServers>
   <FieldServer ID="11">
       <Item Name="Item Name" Data="Item Data" Type="Item Type" />
       <Item Name="Item Name 2" Data="Item Data 2" Type="Item Type 2" />
   </FieldServer>
   <FieldServer ID="12">
       <Item Name="Item Name" Data="Item Data" Type="Item Type" />
   </FieldServer>
</FieldServers>

标准XML序列化,但省略父标记

如果用XmlElement属性修饰集合FieldServerEntryPoints属性,它将生成所需的XML:

public class FieldServers
{
    [XmlElement] //add this line
    public List<FieldServer> FieldServer = new List<FieldServer>();
}
public class FieldServer
{
    [XmlAttribute("ID")]
    public string ID { get; set; }
    [XmlElement("Item")] //add this line
    public List<Item> EntryPoints = new List<Item>();
}

编辑:我错过了EntryPoints元素的重命名。在属性中指定元素名称以使其匹配。(即具有[XmlElement("Item")]

使用现有的类,我复制了相同的值,并生成了具有以上属性更改的XML:

<?xml version="1.0"?>
<FieldServers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <FieldServer ID="11">
    <Item Name="Item Name" Data="Item Data" Type="Item Type" />
    <Item Name="Item Name 2" Data="Item Data 2" Type="Item Type 2" />
  </FieldServer>
  <FieldServer ID="12">
    <Item Name="Item Name" Data="Item Data" Type="Item Type" />
  </FieldServer>
</FieldServers>