У меня есть данные, хранящиеся в экземпляре класса, который был сериализован с помощью .net BinaryFormatter. Теперь я хочу переименовать одно из полей в классе, но все же иметь возможность десериализовать старые данные.
Один из вариантов - реализовать ISerializable и десериализовать все поля класса вручную. Но это похоже на большую работу, особенно если в моем классе много полей, и я переименовал только одно поле.
Есть ли лучший способ?
Крейг предлагает сохранить копию старого класса для десериализации и скопировать значения в новый класс. Я видел это и в другом месте - какое это имеет преимущество перед реализацией ISerializable? Насколько я вижу, при копировании класса у меня остается 2 практически идентичных копии класса, и мне все еще приходится копировать все значения из старого класса в новый класс, что, по-видимому, требует столько же усилий, сколько и реализация ISerializable с почти дублированный класс, брошенный в смесь.
В двух ответах упоминается Binder. Я успешно использовал SerializationBinder для десериализации класса Bar, который был Serialized как класс Foo, но это потому, что имя класса изменилось. Помогает ли SerializationBinder при переименовании поля - например, когда int m_Left был переименован в int m_Right?