XML序列化不再正确格式化

时间:2018-03-06 07:17:58

标签: c# unity3d

我能够在Unity中创建一个XML序列化程序,它可以保存我的游戏状态并且运行正常。从那以后我还没碰过它,但几天之后就开始将XML文件保存在一行了。

以前的表现如下:

public override void OnMessageReceived(RemoteMessage message)
        {
            base.OnMessageReceived(message);
            SendNotificatios(message.GetNotification().Body, message.GetNotification().Title);
        }
        public void SendNotificatios(string body, string Header)
        {
            Notification.Builder builder = new Notification.Builder(this);
            builder.SetSmallIcon(Resource.Drawable.AppLauncher);
            var intent = new Intent(this, typeof(MainActivity));
            intent.AddFlags(ActivityFlags.ClearTop);
            PendingIntent pendingIntent = PendingIntent.GetActivity(this, 0, intent, 0);
            builder.SetContentIntent(pendingIntent);
            builder.SetLargeIcon(BitmapFactory.DecodeResource(Resources, Resource.Drawable.AppLauncher));
            builder.SetContentTitle(Header);
            builder.SetContentText(body);
            builder.SetDefaults(NotificationDefaults.Sound);
            builder.SetAutoCancel(true);
            NotificationManager notificationManager = (NotificationManager)GetSystemService(NotificationService);
            notificationManager.Notify(1, builder.Build());
        }

这就是它现在的样子

<GameData xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <gameFlags/>
    <memories/>
    <lastSaveTime>-8586819040232916923</lastSaveTime>
    <health>50</health>
    <speed>0.27</speed>
    <playerPosition>
        <x>10</x>
        <y>-48.2583</y>
        <z>0</z>
    </playerPosition>
    <lastSaveFile/>
    <savedScene>Area 0-0</savedScene>
    <playerName>Jon</playerName>
    <PlayerPositionX>10</PlayerPositionX>
    <PlayerPositionY>-48.2583</PlayerPositionY>
    <PlayerPositionZ>0</PlayerPositionZ>
</GameData>

一切都在一条线上。我恢复到我以前的提交,当它工作但它仍然保存在一行。有没有人有这种变化的经验?

保存游戏方法

-8586812865931894767 50 0.27 10 -48.2583 0  Default Area 0-0 Jon 10 -48.2583 0 

GameData Class

public void SaveGame(string saveFile)
{
    CheckDirectory();

    gameData.generateGameData (GameObject.FindGameObjectWithTag("Player").GetComponent<Player>());

    // Update saveFile name
    if (saveFile == null)
    {
        saveFile = GenerateNewSaveName();
    }

    this.saveFile = saveFile;

    // FileStream fs = File.Create(GameDic.Instance.SavePath + saveFile);

    UpdateSaveData(saveFile);

    string fullSavePath = SavePath + saveFile + FILE_EXTENSION;

    FileStream fs;

    // Create a file or open an old one up for writing to
    if (!File.Exists(fullSavePath))
    {
        fs = File.Create(fullSavePath);
    }
    else
    {
        fs = File.OpenWrite(fullSavePath);
    }

    XmlSerializer serializer = new XmlSerializer(typeof(GameData));
    TextWriter textWriter = new StreamWriter(fs, System.Text.Encoding.UTF8);
    serializer.Serialize(textWriter, gameData);
    fs.Close();

    Debug.Log("Game Saved to " + fullSavePath);
}

对于QuestInstance类,我想它只是可以是任何空的填充类。它已正确序列化。

1 个答案:

答案 0 :(得分:0)

你的问题很可能是这一行:

fs = File.OpenWrite(fullSavePath);

如果前一个文件比新文件长,那么最后仍会有前一个保存文件中的片段 - 这就是为什么你不能反序列化它的原因。除了if之外,摆脱File.Create条件下的所有内容,它应该可以正常工作。