Вопрос

Я пытаюсь портировать приложение 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

Чтобы обойти это, вы можете выполнить свою собственную сериализацию для своего класса.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top