MrGravity.LevelSelect.Save C# (CSharp) Method

Save() public method

Saves level unlock and scoring information PC saving is straightforward - but xDoc.Save() will not work on xbox360. Instead we use the built in XmlSerializer class to serialize an element out to an xml file. We build our Xelement like normal - but instead of saving that directly using XDocument.Save() we place this XElement into a struct, and use XmlSerializer to serialize the data out into a storage device on the xbox.
public Save ( PlayerIndex player ) : void
player PlayerIndex
return void
        public void Save(PlayerIndex player)
        {
            _playerIndex = player;
            var xLevels = new XElement(XmlKeys.Levels);
            foreach (var l in _mLevels)
            {
                xLevels.Add(l.Export());
            }
            var xDoc = new XDocument();
            xDoc.Add(xLevels);
            //Debug.WriteLine(xDoc.ToString());

            #if XBOX360
            IAsyncResult result;
            if (!mDeviceSelected)
            {
                result = StorageDevice.BeginShowSelector(player, null, null);
                result.AsyncWaitHandle.WaitOne();
                device = StorageDevice.EndShowSelector(result);
                result.AsyncWaitHandle.Close();
                mDeviceSelected = true;
            }

            result = device.BeginOpenContainer("GravityShift", null, null);
            result.AsyncWaitHandle.WaitOne();
            container = device.EndOpenContainer(result);
            result.AsyncWaitHandle.Close();
            //container.DeleteFile("TrialLevelList.xml");
            //container.DeleteFile("LevelList.xml");

            Stream stream;
            if (container.FileExists("LevelList.xml"))
            {
                container.DeleteFile("LevelList.xml");
            }
            stream = container.CreateFile("LevelList.xml");
            XmlSerializer serializer = new XmlSerializer(typeof(SaveGameData));
            SaveGameData data = new SaveGameData();
            data.savedata = xLevels;
            serializer.Serialize(stream, data);
            stream.Close();
            container.Dispose();

            #else
                xDoc.Save(LevelList);
            #endif
        }