У меня есть класс C #, который сериализуется на диск с помощью BinaryFormatter , например, в следующем примере:
// Version 3.0
[Serializable]
public class Person
{
public string FullName;
[OptionalField(VersionAdded=2)]
public string NickName;
[OptionalField(VersionAdded=2)]
public DateTime BirthDate;
[OptionalField(VersionAdded=3)]
public int Weight;
}
Позже я хочу провести рефакторинг этого класса одним или несколькими из следующее
- Измените его имя
- Измените его пространство имен
- Перейти к другой сборке
Насколько я могу судить, двоичный файл может быть десериализован только при наличии класса с точно таким же именем, пространством имен и именем сборки.
Как мне обойти это?
Можно ли сопоставить десериализацию с другим именем класса, пространством имен и сборкой без прерывания Версия Допустимая сериализация ?
Вы можете реализовать интерфейс ISerializable
и переопределить GetObjectData
для обеспечения собственной десериализации. Я не пробовал, но вы должны быть в состоянии десериализовать ваш старый объект "вручную".