如何在c#中正确删除序列化字段?
本文关键字:删除 序列化 字段 | 更新日期: 2023-09-27 18:18:20
我用序列化类保存数据,现在我想删除不再需要的文件成员,但是旧版本已经序列化为文件,当新版本从文件反序列化时,我如何防止异常?
顺便说一下,这个c#是在Unity3d中使用的,mono版本
[Serializable]
public class UserModel {
// old version
Dictionary<string,int> readyToRemoveDict;
}
[Serializable]
public class UserModel {
//new version
//Dictionary<string,int> readyToRemoveDict;
}
//在gameManager中,这就是我保存它的方式
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();
}
我尝试添加[OptionalFiled]
,但仍然没有例外
必须保持新旧代码之间的兼容性。然后,当你将新对象进行反序列化时,没有出现异常。
需要保留类的所有属性,并且此属性未使用时将该属性设置为NonSerialized。
当你从文件中接收一个UserModel对象时,readyToRemoveDict属性将有一个空值
的例子:
[Serializable]
public class UserModel
{
// New version
[NonSerialized]
public Dictionary <string, int> readyToRemoveDict;
}