OmitXmlDeclaration不能与XmlSerializer一起使用
问题描述:
我一直在为基于图块的游戏开发地图编辑器。我想加载和保存地图到一个XML文件。OmitXmlDeclaration不能与XmlSerializer一起使用
找到了关于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格式。 令人难以置信的烦人,因为一切顺利工作正常。
答
不幸的是,XmlSerializer不幸的是不太一致,特别是在Windows和Xbox之间。这里有一个想法,使用内置的XnaContent序列化器。这里有一个很好的教程,越过它:
http://glennwatson.net/?p=143
或者从微软的文档:http://msdn.microsoft.com/en-us/library/ff604981.aspx
注:上述文献肖恩Hargreave的优秀博客文章链接的话题,因为在MSDN页面上的社区内容好:
有趣,并可能是一个错误。出于好奇,你可以用'List'而不是'Array'来试试吗?你也可以在你的'StringWriter','FileStream'和'StreamReader'周围放置'使用'块吗?最后,什么是“xmlText”?我没有看到它的定义。 –
2011-05-08 02:01:33