OmitXmlDeclaration不能与XmlSerializer一起使用

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格式。 令人难以置信的烦人,因为一切顺利工作正常。

+0

有趣,并可能是一个错误。出于好奇,你可以用'List '而不是'Array'来试试吗?你也可以在你的'StringWriter','FileStream'和'StreamReader'周围放置'使用'块吗?最后,什么是“xmlText”?我没有看到它的定义。 – 2011-05-08 02:01:33

不幸的是,XmlSerializer不幸的是不太一致,特别是在Windows和Xbox之间。这里有一个想法,使用内置的XnaContent序列化器。这里有一个很好的教程,越过它:
http://glennwatson.net/?p=143

或者从微软的文档:http://msdn.microsoft.com/en-us/library/ff604981.aspx

注:上述文献肖恩Hargreave的优秀博客文章链接的话题,因为在MSDN页面上的社区内容好: