【发布时间】:2011-05-07 18:43:23
【问题描述】:
我一直在为基于图块的游戏开发地图编辑器。我想加载地图并将其保存到 xml 文件中。
发现了 xmlSerializer 类并想尝试一下,而不是构建我自己的解析器。这并不难弄清楚。我现在遇到的一个问题是我无法摆脱 xml 声明。似乎根本没有应用 XmlSettings。整晚都在搞乱它,没有任何进展,非常感谢帮助。代码如下:
public static void SerializeMap(Array map)
{
XmlWriterSettings xmlSettings = new XmlWriterSettings();
xmlSettings.OmitXmlDeclaration = true;
xmlSettings.ConformanceLevel = ConformanceLevel.Fragment;
xmlSettings.Indent = false;
var xmlSerializer = new XmlSerializer(typeof(Tile));
XmlSerializerNamespaces emptyNameSpace = new XmlSerializerNamespaces();
emptyNameSpace.Add("", "");
//create string of xml first, then write to file
StringWriter stringWriter = new StringWriter();
using (XmlWriter xmlWriter = XmlWriter.Create(stringWriter, xmlSettings))
{
for (int z = 0; z < map.GetLength(0); z++)
{
for (int x = 0; x < map.GetLength(1); x++)
{
for (int y = 0; y < map.GetLength(2); y++)
{
xmlSerializer.Serialize(stringWriter, map.GetValue(z, x, y), emptyNameSpace);
}
}
}
}
FileStream fs = new FileStream("Content/tiletest.xml", FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine(xmlText);
sw.Close();
fs.Close();
}
因为我正在循环遍历对象,所以 xml 文件中的每个新写入对象都将附加一个 xml 声明,这将破坏 xml 格式。 令人难以置信的烦人,因为其他一切都可以在序列化中正常工作。
【问题讨论】:
-
很有趣,也可能是一个错误。出于好奇,您可以尝试使用
List<Tile>而不是Array吗?您能否在您的StringWriter、FileStream和StreamReader周围放置using块?最后,xmlText是什么?我看不出这是在哪里定义的。
标签: xna xml serialization