Моно, Сериализуемые объекты с 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
Чтобы обойти это, вы можете сделать свою собственную сериализацию для своего класса.