Моно-Сериализуемые объекты с помощью MarshalByRefObject
-
21-08-2019 - |
Вопрос
Я пытаюсь портировать приложение C # на .NET (клиент-сервер) и сталкиваюсь с проблемами с сериализацией.
Клиент Linux сериализует объект and, но сервер Windows не может его десериализовать, выдавая ошибку:
Система.Среда выполнения.Сериализация.Исключение SerializationException
Поле "MarshalByRefObject+__identity" не найдено в классе
Десериализация выполняется с помощью BinaryFormatter:
BinaryFormatter formatter = new BinaryFormatter();
formatter.Deserialize(data);
Класс, о котором идет речь, имеет атрибут Serializable и наследуется от MarshalByRefObject .Если я удалю наследование MarshalByRefObject, это будет работать нормально.В Windows все работает нормально, и поэтому я предполагаю, что это проблема, специфичная для Mono.
Любая помощь / совет были бы с благодарностью приняты ^_^
Решение
Двоичная сериализация опирается на частные детали реализации.В вашем случае личное поле __identity.Поскольку разработчики Mono не имеют доступа к частным деталям реализации, они иногда не совпадают, и, следовательно, двоичная сериализация не всегда совместима между .Net и Mono.
Пожалуйста, отправьте тестовый пример с Mono:http://www.mono-project.com/Bugs
Чтобы обойти это, вы можете выполнить свою собственную сериализацию для своего класса.