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

时间:2015-10-19 06:10:48

标签: c# unity3d mono

我使用序列化类保存数据,现在我想删除不再需要的归档成员,但是旧版本已经作为文件加强了,如何从文件反序列化新版本时防止异常?

顺便说一句,这个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(); } ,但仍然不是例外

1 个答案:

答案 0 :(得分:0)

您必须保持旧代码和新代码之间的兼容性。然后,虽然您将对新对象进行反序列化,但并未出现异常。

需要保留类的所有属性和未使用的此属性将属性设置为NonSerialized。

当您从文件中重新获取对象UserModel时,readyToRemoveDict属性将会 有一个空值。

示例:

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