Unity3d 为什么BinaryFormatter不支持版本公差?

Unity3d 为什么BinaryFormatter不支持版本公差?,unity3d,Unity3d,根据.NET文档,在.NET 2.0中将版本公差添加到BinaryFormatter中: 所以在理论上,我应该能够从序列化类中删除一个字段,而不会让事情变得一团糟。即: //Version 1 SaveData { public int Num1; public int Num2; } //Version 2 SaveData { public int Num1; } 尽管我删除了Num2,但由于版本公差,类的旧版本仍然应该反序列化ok:在删除未使用的成员变量的情况

根据.NET文档,在.NET 2.0中将版本公差添加到BinaryFormatter中:

所以在理论上,我应该能够从序列化类中删除一个字段,而不会让事情变得一团糟。即:

//Version 1
SaveData {
    public int Num1;
    public int Num2;
}

//Version 2
SaveData {
    public int Num1;
}
尽管我删除了Num2,但由于版本公差,类的旧版本仍然应该反序列化ok:在删除未使用的成员变量的情况下,二进制格式化程序将忽略流中的附加信息。

相反,Unity抛出了一个错误: System.Runtime.Serialization.SerializationException:在类SaveData中找不到字段Num2

有没有办法让它团结起来

[编辑]以下是我用来保存/加载的代码:

//Save
BinaryFormatter bf = new BinaryFormatter();
FileStream fs = File.Create(path);
bf.Serialize(fs, data);
fs.Close();

//Load
BinaryFormatter bf = new BinaryFormatter();
FileStream fs = new FileStream(path, FileMode.Open);
SaveData data = (SaveData)bf.Deserialize(fs);
fs.Close();
首先,BinaryFormatter可能很奇怪,我自己不测试这个案例,因为Unity使用了一些奇怪的版本,而不是MS.NET。所以,.NET文档可能会撒谎:-<大多数时候,它们都是以相同的方式工作的


第二,我在Unity项目中使用数据。到目前为止,它就像一个符咒。

向我们展示代码。你真的在使用BinaryFormatter吗?或者你正在使用Unity的序列化?我正在使用BinaryFormatter,代码已经添加到OP中。好的,谢谢。这看起来很像我刚写的二进制格式化程序代码。