Моно, Сериализуемые объекты с MarshalByRefObject

Я пытаюсь перенести приложение C# на.NET (клиентский сервер), и у меня возникают проблемы с сериализацией.

Клиент Linux сериализует и возражает, но сервер Windows не может десериализовать его, выдав ошибку:

System.Runtime.Serialization.SerializationException
Поле "MarshalByRefObject+__identity" не найдено в классе

Десериализация осуществляется через BinaryFormatter:

BinaryFormatter formatter = new BinaryFormatter();
formatter.Deserialize(data);

Данный класс имеет атрибут Serializable и наследуется от MarshalByRefObject. Если я удаляю наследование MarshalByRefObject, он работает нормально. В Windows все работает нормально, и поэтому я предполагаю, что это проблема Mono.

Любая помощь / совет будет принята с благодарностью ^_^

1 ответ

Решение

Двоичная сериализация опирается на частные детали реализации. В вашем случае приватное поле __identity. Поскольку разработчики Mono не имеют доступа к частным деталям реализации, они иногда не совпадают, и поэтому двоичная сериализация не всегда совместима между.Net и Mono.

Пожалуйста, отправьте тестовый пример в Mono: http://www.mono-project.com/Bugs

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

Другие вопросы по тегам