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

时间:2018-10-26 15:47:17

标签: c# serialization deserialization binaryformatter

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

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

然后我使用BinaryFormatter来序列化用户数据并将其保存到文件中。时间过去后,我决定我们不再需要“昵称”字段,因此我将其删除:

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

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

  

System.Runtime.Serialization.SerializationException:在类MyData中找不到字段“昵称”

有没有办法告诉BinaryFormatter,如果遇到字段昵称就忽略它,然后像往常一样反序列化其余字段?

1 个答案:

答案 0 :(得分:1)

不,这是不可能的。您要做的是将其反序列化为具有与以前相同结构的类,然后手动将旧对象迁移到新对象,并保存新对象以备将来使用。