Исключение десериализации двоичного форматера - PullRequest
0 голосов
/ 08 февраля 2019

Я использую BinaryFormatter для сериализации и десериализации.Из-за некоторых требований мне нужно изменить имя пространства имен и имя класса.

В обоих случаях - либо я изменяю имя пространства имен, либо я изменяю имя класса, я получил исключение сериализации.

Есть ли какие-либоспособ решить эту проблему?

1 Ответ

0 голосов
/ 08 февраля 2019

Вы можете сделать это, написав свой собственный SerializationBinder, то есть

class MyCustomBinder : SerializationBinder
{
    public override void BindToName(Type serializedType, out string assemblyName, out string typeName)
    {
        // TODO: turn a Type into a pair of strings
    }
    public override Type BindToType(string assemblyName, string typeName)
    {
        // TODO: turn a pair of strings into a Type
    }
}

Затем вы должны указать .Binder в экземпляре BinaryFormatter, а это должно работать.Вам, конечно, придется выяснить, какими были старые assemblyName / typeName и т. Д., И убедиться, что он ведет себя так в обоих направлениях.

Однако ... и я могу 'Достаточно подчеркнуть это: если вы столкнулись с этой проблемой, BinaryFormatter, вероятно, просто плохой выбор сериализатора.Существует много альтернативных сериализаторов, которые могли бы работать намного лучше - быть более эффективными и более дружественными к рефакторингу.Пожалуйста, обратите внимание на смену сериализатора.

...