我使用序列化类保存数据,现在我想删除不再需要的归档成员,但是旧版本已经作为文件加强了,如何从文件反序列化新版本时防止异常?
顺便说一句,这个C#用于Unity3d,单声道版本
Project.where("(form_data -> '22-10-2014')::date > to_date('05 Dec 2000', 'DD Mon YYYY')")
//在gameManager中,这就是我保存它的方式
[Serializable]
public class UserModel {
// old version
Dictionary<string,int> readyToRemoveDict;
}
[Serializable]
public class UserModel {
//new version
//Dictionary<string,int> readyToRemoveDict;
}
我尝试添加 public void SaveData()
{
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Create(Application.persistentDataPath + "/user.db");
bf.Serialize(file,userModel);// this is the UserModel
file.Close();
}
,但仍然不是例外
答案 0 :(得分:0)
您必须保持旧代码和新代码之间的兼容性。然后,虽然您将对新对象进行反序列化,但并未出现异常。
需要保留类的所有属性和未使用的此属性将属性设置为NonSerialized。
当您从文件中重新获取对象UserModel时,readyToRemoveDict属性将会 有一个空值。
示例:
[Serializable]
public class UserModel
{
// New version
[NonSerialized]
public Dictionary <string, int> readyToRemoveDict;
}