BinaryFormatter .NetFramework 4.6.1 и 2.0 результат отличается

#c#-4.0 #c#-2.0 #.net-framework-version #binaryformatter

#c #-4.0 #c #-2.0 #.net-framework-version #двоичный форматировщик

Вопрос:

старый проект .net 2.0 теперь хочет 4.6.1, но результат BinaryFormatter отличается. пожалуйста, помогите мне это исправить.

Комментарии:

1. Не используйте BinaryFormatter для начала. Помимо сбоев при каждом изменении среды выполнения, он небезопасен, считается устаревшим как минимум десять лет и помечен для удаления

2. Что касается того, что в этом случае безвозвратно сломалось, среды выполнения .NET 2.0 и .NET 4.0 совершенно разные. BinaryFormatter сохраняет все в типе, включая имена типов и поля, поэтому перезагрузка типа, который изменился с одной версии среды выполнения на следующую, невозможна. Это также делает его кошмаром безопасности — он может загружать произвольные типы из двоичного файла, позволяя вводить код

3. Из руководства по безопасности BinaryFormatter большое желтое предупреждение в верхней части документа гласит The BinaryFormatter type is dangerous and is not recommended for data processing. Applications should stop using BinaryFormatter as soon as possible, even if they believe the data they're processing to be trustworthy. BinaryFormatter is insecure and can't be made secure.

4. Файлы, сериализованные с помощью BinaryFormatter (версия 2.0), вероятно, будут недоступны для чтения BinaryFormatter (версия 4.6.1). Такие файлы очень громоздки и рискованны в обращении. Код, который их использует, как правило, легко ломается. Пожалуйста, прочитайте: docs.microsoft.com/en-GB/dotnet/standard/serialization/… — может быть, вы могли бы перейти на лучшую альтернативу, например System.Text.Json

5. Это не maybe you should migrate . Это то, что вы должны перенести . Прошло 10 лет с момента выхода .NET 4.0.