根据.NET文档,Version Tolerance被添加到.NET 2.0中的BinaryFormatter: https://msdn.microsoft.com/en-us/magazine/cc163902.aspx#S10
所以理论上,我应该能够从Serialized类中删除一个字段,而不会让事情爆炸。即:
//Version 1
SaveData {
public int Num1;
public int Num2;
}
//Version 2
SaveData {
public int Num1;
}
即使我删除了Num2,由于Version Tolerance,该类的旧版本仍然应该反序列化ok:"在删除未使用的成员变量的情况下,二进制格式化程序将忽略其他在流中找到的信息。 " https://msdn.microsoft.com/en-us/magazine/cc163902.aspx#S10
相反,Unity正在抛出一个错误: System.Runtime.Serialization.SerializationException:Field" Num2"在SaveData类中找不到
有没有办法在Unity中使用它?
[编辑]这是我用来保存/加载的代码:
//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();
答案 0 :(得分:0)
首先,BinaryFormatter
可能很奇怪(我自己不测试这个案例),因为Unity使用了一些奇怪版本的Mono而不是MS.NET。因此,.NET文档可能会说谎: - < (大多数时候,他们以同样的方式工作)
其次,我使用protobuf-net在我的Unity项目中执行数据操作。到目前为止,它就像一个魅力。