标准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>
如果用XmlElement
属性修饰集合FieldServer
和EntryPoints
属性,它将生成所需的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>