如何使用包含不再存在的字段的 BinaryFormatter 反序列化对象?

How do I deserialize an object using BinaryFormatter that contains a field that no longer exists?

假设我前段时间创建了一个数据class:

[Serializable]
public class MyData
{
  public string name;
  public string nickname;
  public int id;
}

并且我使用 BinaryFormatter 将用户数据序列化并保存到文件中。时间过去后,我决定我们不再需要字段 "nickname," 所以我将其删除:

[Serializable]
public class MyData
{
  public string name;
  public int id;
}

但是,现在当我尝试反序列化一个在它仍然包含昵称字段时被序列化的对象时,它抛出一个异常:

System.Runtime.Serialization.SerializationException: Field "nickname" not found in class MyData

有没有办法告诉 BinaryFormatter 如果它遇到字段昵称就忽略它并正常反序列化其余字段?

不,这不可能。你要做的就是将它反序列化为一个与之前相同结构的class,然后手动将你的旧对象迁移到你的新对象,并保存新对象以备将来使用。