这是我目前的代码:
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>
将Map作为根节点。
我的问题是:我怎样才能做到这一点,而不是我现在拥有的,我有以下几点?
<GameSave>
<Map>
<Tile>TileData</Tile>
</Map>
<Options>
</Options>
</GameSave>
所以基本上,添加一个根节点并将我的Map节点放入其中(包含Tile节点),以及一个options节点。我是否必须改变我这样做的方式而不使用列表,因为列表只包含瓷砖?
答案 0 :(得分:0)
您需要一个具有适当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>