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

时间:2014-04-15 20:47:19

标签: c# serialization xml-serialization

我有以下代码尝试序列化为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>

1 个答案:

答案 0 :(得分:2)

如果您使用XmlElement attribute装饰您的收藏集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>