Как десериализовать несколько несовместимые данные BinaryFormatter? - PullRequest
2 голосов
/ 10 апреля 2009

У меня есть унаследованная кодовая база, разработанная в .NET 1.1. Когда я перенес его на 2.0, я переименовал сборку. Теперь я обнаружил, что необходимо будет прочитать старые файлы, содержащие объекты, сериализованные старой сборкой и .NET 1.1. Некоторые поля успешно десериализованы, но большинство игнорируется. Если я включаю FormatterAssemblyStyle.Full, я получаю сообщение об ошибке, например:

Элемент 'T_VERSION+s_sys_ver' в классе 'MyNamespace.T_VERSION' отсутствует в сериализованном потоке и не помечен с помощью System.Runtime.Serialization.OptionalFieldAttribute.

Проверка двоичного файла показывает, что T_VERSION+s_sys_ve r присутствует в некоторой форме , а тип поля не изменился.

Есть ли какой-нибудь способ десериализации файлов старого формата, если не считать ручного обратного инжиниринга старого формата и написания моей собственной процедуры десериализации вручную?

1 Ответ

5 голосов
/ 10 апреля 2009

Check SerializationBinder

Во время сериализации форматер передает информацию, необходимую для создать экземпляр объекта из правильный тип и версия. это информация обычно включает в себя полное имя типа и название сборки предмет. Название сборки включает в себя имя, версия и строгое имя (см. Собрание со строгими именами) Ассамблея. По умолчанию, десериализация использует эту информацию создать экземпляр идентичного объект (за исключением любого загрузка сборки ограничена политика безопасности). Некоторые пользователи должны контролировать, какой класс загрузить потому что класс переместился между сборки или другая версия класс требуется на сервере и клиент.

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