序列化时出现意外的二进制元素255

时间:2017-08-01 15:17:05

标签: c# unity3d serialization binaryformatter

我使用Unity 2017并希望序列化保存游戏数据,如下所示:

public void Save(Statistics data)
{
    BinaryFormatter bf = new BinaryFormatter();
    FileStream file = File.Create(Application.persistentDataPath
         + "/playerInfo.dat");
    bf.Serialize(file, data);
    file.Close();
}

LevelData类标记为Serializable,仅包含stringint。实现IPersistentData的类也符合这些要求。

我确实找到了问题并发现我应该在我所做的Awake方法中设置一个环境变量,但这并没有解决任何问题。我使用 Windows 10 作为操作系统进行开发,但游戏将用于 Android

尝试保存时,我总是会遇到此异常

  

SerializationException:意外的二进制元素:255   System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObject(BinaryElement element,System.IO.BinaryReader reader,System.Int64& objectId,System.Object& value,System.Runtime.Serialization.SerializationInfo& info)

欢迎任何形式的建议来解决这个问题。

修改

尝试 Programmer 的提示后更新: 我想要序列化的课程:

[Serializable]
public class Statistics
{
    public int LastPlayedLevel;
    public Statistics()
    {
        MusicVolume = 1f;
        SFXVolume = 1f;
        LevelDatas = new List<LevelData>();
        LastPlayedLevel = 1;
    }
    public float MusicVolume;
    public float SFXVolume;
    public List<LevelData> LevelDatas;
}

LevelData

[Serializable]
public class LevelData
{
    public LevelData(int levelNumber,string name)
    {
        this.LevelNumber = levelNumber;
        this.Name = name;
        this.BestPercent = 0;
        this.DeathCount = 0;
    }
    public int LevelNumber;
    public string Name;
    public int BestPercent;
    public uint DeathCount;
}

0 个答案:

没有答案