Note that there are some explanatory texts on larger screens.

plurals
  1. POThere is an error in XML document (Keeps adding junk to end of file)
    text
    copied!<p>I'm making a game and I am serializing the save game data, the data is simply a few lists of bools, ints and floats.</p> <p>But about 50% of the time I get an error when the data tries to save or load that says "There is an error in XML document". The error is always located at the end of the file, even after it has changed size or I have added other variables. </p> <p>It appears that very last part of the XML data is getting copied twice. The last line of the XML should read:</p> <pre><code>&lt;/LevelStats&gt; </code></pre> <p>But when an error occurs it often reads</p> <pre><code>&lt;/LevelStats&gt;&gt; </code></pre> <p>Or</p> <pre><code>&lt;/LevelStats&gt;tats&gt; </code></pre> <p>Or some other small part of the last line duplicated.</p> <p>Here is the class I am Serializing:</p> <pre><code>using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml.Serialization; using Microsoft.Xna.Framework.Storage; using System.IO; namespace Jetpack.Classes { [Serializable] public struct LevelStats { // Player Bests public List&lt;float?&gt; fTimeList; public List&lt;int?&gt; iScoreList; public List&lt;int?&gt; iFuelList; // Time public List&lt;bool&gt; bBronzeTimeList; public List&lt;bool&gt; bSilverTimeList; public List&lt;bool&gt; bGoldTimeList; // Score public List&lt;bool&gt; bBronzeScoreList; public List&lt;bool&gt; bSilverScoreList; public List&lt;bool&gt; bGoldScoreList; // Fuel public List&lt;bool&gt; bBronzeFuelList; public List&lt;bool&gt; bSilverFuelList; public List&lt;bool&gt; bGoldFuelList; // Level Complete public List&lt;bool&gt; bIsLevelComplete; } } </code></pre> <p>And here is my methods for saving the loading the data:</p> <h1>region Save &amp; Load Level Stats</h1> <pre><code> public static void SaveLevelStats(LevelStats levelStats, string filename) { // Get the path of the save game string fullpath = System.IO.Path.Combine(Directory.GetCurrentDirectory(), filename); // Open the file, creating it if necessary FileStream stream = File.Open(fullpath, FileMode.OpenOrCreate); try { // Convert the object to XML data and put it in the stream XmlSerializer serializer = new XmlSerializer(typeof(LevelStats)); serializer.Serialize(stream, levelStats); } finally { // Close the file stream.Close(); } } public static LevelStats LoadLevelStats(string filename) { LevelStats levelStats; // Get the path of the save game string fullpath = System.IO.Path.Combine((Directory.GetCurrentDirectory()), filename); // Open the file FileStream stream = File.Open(fullpath, FileMode.OpenOrCreate, FileAccess.Read); try { // Read the data from the file XmlSerializer serializer = new XmlSerializer(typeof(LevelStats)); levelStats = (LevelStats)serializer.Deserialize(stream); } finally { // Close the file stream.Close(); } return (levelStats); } #endregion </code></pre> <p>And finally here is the XML File</p> <pre><code>&lt;?xml version="1.0"?&gt; &lt;LevelStats xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt; &lt;fTimeList&gt; &lt;float xsi:nil="true" /&gt; &lt;float&gt;19.016552&lt;/float&gt; &lt;float&gt;9.766692&lt;/float&gt; &lt;float&gt;62.9992142&lt;/float&gt; &lt;float&gt;11.6666632&lt;/float&gt; &lt;float xsi:nil="true" /&gt; &lt;float xsi:nil="true" /&gt; &lt;float xsi:nil="true" /&gt; &lt;float xsi:nil="true" /&gt; &lt;float xsi:nil="true" /&gt; &lt;float xsi:nil="true" /&gt; &lt;/fTimeList&gt; &lt;iScoreList&gt; &lt;int xsi:nil="true" /&gt; &lt;int&gt;690&lt;/int&gt; &lt;int&gt;390&lt;/int&gt; &lt;int&gt;690&lt;/int&gt; &lt;int&gt;200&lt;/int&gt; &lt;int xsi:nil="true" /&gt; &lt;int xsi:nil="true" /&gt; &lt;int xsi:nil="true" /&gt; &lt;int xsi:nil="true" /&gt; &lt;int xsi:nil="true" /&gt; &lt;int xsi:nil="true" /&gt; &lt;/iScoreList&gt; &lt;iFuelList&gt; &lt;int xsi:nil="true" /&gt; &lt;int&gt;293&lt;/int&gt; &lt;int&gt;206&lt;/int&gt; &lt;int&gt;1134&lt;/int&gt; &lt;int&gt;202&lt;/int&gt; &lt;int xsi:nil="true" /&gt; &lt;int xsi:nil="true" /&gt; &lt;int xsi:nil="true" /&gt; &lt;int xsi:nil="true" /&gt; &lt;int xsi:nil="true" /&gt; &lt;int xsi:nil="true" /&gt; &lt;/iFuelList&gt; &lt;bBronzeTimeList&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;true&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;/bBronzeTimeList&gt; &lt;bSilverTimeList&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;true&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;/bSilverTimeList&gt; &lt;bGoldTimeList&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;true&lt;/boolean&gt; &lt;boolean&gt;true&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;true&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;/bGoldTimeList&gt; &lt;bBronzeScoreList&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;true&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;/bBronzeScoreList&gt; &lt;bSilverScoreList&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;true&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;true&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;/bSilverScoreList&gt; &lt;bGoldScoreList&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;/bGoldScoreList&gt; &lt;bBronzeFuelList&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;true&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;true&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;/bBronzeFuelList&gt; &lt;bSilverFuelList&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;true&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;/bSilverFuelList&gt; &lt;bGoldFuelList&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;true&lt;/boolean&gt; &lt;boolean&gt;true&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;true&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;/bGoldFuelList&gt; &lt;bIsLevelComplete&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;true&lt;/boolean&gt; &lt;boolean&gt;true&lt;/boolean&gt; &lt;boolean&gt;true&lt;/boolean&gt; &lt;boolean&gt;true&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;boolean&gt;false&lt;/boolean&gt; &lt;/bIsLevelComplete&gt; &lt;/LevelStats&gt; </code></pre> <p>Any help you can provide me with will be greatly appreciated. </p> <p>Thank you.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload