Десериализация устаревшего (двоичного) файла после рефакторинга - PullRequest
0 голосов
/ 17 августа 2010

Я пытаюсь реорганизовать иерархию пространства имен моего приложения, поэтому я использую подкласс System.Runtime.Serialization.SerializationBinder, чтобы попытаться обработать переименование.(Большинство моих переименованных классов правильно десериализованы в их новые пространства имен без проблем.)

Проблема, с которой я столкнулся, заключается в том, что один моих сериализованных классов (который реализует INotifyPropertyChanged) не удалось пометитьсобытие PropertyChanged как [field:NonSerialized] (упс), поэтому унаследованные файлы держатся за ссылку на устаревшую Type для этого класса (через сериализованный делегат).

Я реализовал ISerializable в переименованном классе в попытке избежать десериализации события PropertyChanged, но, похоже, это не сработало - попытка создания экземпляра старого (переименованного) класса все еще происходит.

Как мнезаставить BinaryFormatter избегать попыток десериализации делегатов?

Ответы [ 2 ]

1 голос
/ 14 сентября 2010

Решение, по-видимому, заключалось в том, чтобы реализовать ISerializable в классе, содержащем ссылку на Type, и вручную управлять тем, какие поля были сериализованы и как.Это потребовало, чтобы измененный класс оставил заглушку класса в исходном пространстве имен для промежуточной сборки, в которой мы преобразовали устаревшие файлы в новый (переработанный) формат.Обратная совместимость не может быть восстановлена, но мы смогли спасти поврежденные файлы.

0 голосов
/ 21 августа 2010

Существует причина, по которой делегаты МОГУТ быть объявлены ВНЕШНИМИ КЛАССАМИ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...