2013-06-30 79 views
2

我使用下面的代码序列化/反序列化的游戏数据到.lst文件:XNA XML序列化问题

public static void SaveData(StoreData data) 
    { 
     // Get the path of the save game 
     string fullpath = Path.Combine("Content", filename); 

     // Open the file, creating it if necessary 
     FileStream stream = File.Open(fullpath, FileMode.Create); 

     try 
     { 
      // Convert the object to XML data and put it in the stream 
      XmlSerializer serializer = new XmlSerializer(typeof(StoreData)); 
      serializer.Serialize(stream, data); 
     } 
     finally 
     { 
      // Close the file 
      stream.Close(); 
     } 
    } 

序列化似乎好工作的大部分时间。下面是创建的文件:

<?xml version="1.0"?> 
<StoreData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <score>2540</score> 
    <level>8</level> 
    <difficulty>true</difficulty> 
    <sound>true</sound> 
    <mouseControl>true</mouseControl> 
</StoreData> 

但有时系列化似乎出问题,并在打开它似乎是一个多余的几个字符被添加到文件的末尾是这样创造的东西的文件:

<?xml version="1.0"?> 
<StoreData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <score>2540</score> 
    <level>8</level> 
    <difficulty>true</difficulty> 
    <sound>true</sound> 
    <mouseControl>true</mouseControl> 
</StoreData>a> ---> extra bit added 

这会导致游戏在尝试反序列化时崩溃,因为它的格式不正确。如果有人知道为什么会发生这种情况,或者我做错了什么,请让我知道。

在此先感谢。

+0

嗯;通常当这被报告时,他们没有使用FileMode.Create。但是你正确使用这个。奇。额外的位是XML的结尾吗? –

回答

2

的问题是您使用File.Open

而是使用新的FileStream

的FileStream流=新的FileStream(FULLPATH,FileMode.Create);

File.Open取消FileMode.Create

+0

哦,我明白了。我只是试了一下,似乎已经解决了这个问题,感谢你的帮助丹尼尔。 – LionSword