Как десериализовать объект, используя BinaryFormatter, который содержит поле, которое больше не существует? - PullRequest
0 голосов
/ 26 октября 2018

Скажем, я создал класс данных некоторое время назад:

[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 голосов
/ 26 октября 2018

Нет, это невозможно.Что вам нужно сделать, это десериализовать его в класс с такой же структурой, как и раньше, затем вручную перенести старый объект в новый и сохранить новый объект на будущее.

...