XML 序列化程序 - 序列化程序 (C#) 的高级功能

本文关键字:序列化 程序 高级 功能 XML | 更新日期: 2023-09-27 18:32:32

这是我当前的代码:

List<Tile> listTiles = new List<Tile>();
for (int i = 0; i < Width; i++)
for (int j = 0; j < Height; j++)
{
    //Load each tile into the list
    listTiles.Add(mapbox.RenderedMap.Tiles[i, j]);
}
XmlSerializer serializer = new XmlSerializer(listTiles.GetType(), new  XmlRootAttribute("Map"));
StreamWriter writer = new StreamWriter(@"savedmap.xml");
serializer.Serialize(writer.BaseStream, listTiles);

它的基本作用是将每个当前磁贴加载到列表中,然后以以下格式序列化:

<Map>
    <Tile>TileData</Tile>
</Map> 

以映射为根节点。

我的问题是:我怎样才能做到这样,而不是我现在拥有的,我有以下几点?

<GameSave>
    <Map>
        <Tile>TileData</Tile>
    </Map>
    <Options>
    </Options>
</GameSave>

所以基本上,添加一个根节点并将我的 Map 节点(其中包含 Tile 节点)放在一个选项节点旁边。我是否必须更改我执行此操作的方式并且不使用列表,因为列表仅包含磁贴?

XML 序列化程序 - 序列化程序 (C#) 的高级功能

您需要一个具有适当 XML 属性的包装对象,以便序列化程序理解所需的格式。下面显示了它的外观:

public class Tile
{
    public string TileData { get; set; }
}
public class Option
{
    public string Key { get; set; }
    public string Value { get; set; }
}
[XmlRoot("GameSave")]
public class GameSave
{
    [XmlArray("Map")]
    [XmlArrayItem("Tile")]
    public List<Tile> Tiles { get; set; }
    [XmlArray("Options")]
    [XmlArrayItem("Option")]
    public List<Option> Options { get; set; }
}

然后,在生成 GameSave 对象后,您将看到以下输出:

<?xml version="1.0" encoding="utf-16"?>
<GameSave xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Map>
    <Tile>
      <TileData>Test</TileData>
    </Tile>
  </Map>
  <Options>
    <Option>
      <Key>Option</Key>
      <Value>Value</Value>
    </Option>
  </Options>
</GameSave>