如何在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],但仍然没有例外

如何在c#中正确删除序列化字段?

必须保持新旧代码之间的兼容性。然后,当你将新对象进行反序列化时,没有出现异常。

需要保留类的所有属性,并且此属性未使用时将该属性设置为NonSerialized。

当你从文件中接收一个UserModel对象时,readyToRemoveDict属性将有一个空值

的例子:

[Serializable]
public class UserModel
{
      // New version
      [NonSerialized]
      public Dictionary <string, int> readyToRemoveDict;
}