2009-07-02 2 views
2

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

в Linux клиент упорядочивает и объект, но сервер для Windows не может десериализации его, давая ошибку:

System.Runtime.Serialization.SerializationException
поле «MarshalByRefObject + __ идентичность» не найден в классе

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

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

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

Любая помощь/советы будут оценены^_^

ответ

4

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

Пожалуйста файл тестового случая с Mono: http://www.mono-project.com/Bugs

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

+0

:-) отлично !!! Лол... – IAbstract

Смежные вопросы