Question

Je tente de porter une application C # .NET (serveur client), et je suis en cours d'exécution dans des problèmes avec la sérialisation.

Le client Linux sérialise et de l'objet, mais le serveur Windows ne peut pas désérialiser, donnant l'erreur:

System.Runtime.Serialization.SerializationException
Champ "MarshalByRefObject + __ identité" ne figure pas dans la classe

Désérialisation se fait via BinaryFormatter:

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

La classe en question a l'attribut Serializable, et hérite de MarshalByRefObject. Si je supprime l'héritage de MarshalByRefObject, il fonctionne très bien. Tout fonctionne très bien dans Windows, et je suis tellement supposer que ce soit un problème spécifique Mono.

Toute aide / conseil serait grandement apprécié ^ _ ^

Était-ce utile?

La solution

sérialisation binaire repose sur les détails de mise en œuvre privée. Dans votre cas, le domaine privé __identity. Parce que les développeurs Mono n'ont pas accès aux détails de mise en œuvre privés, ceux-ci ne correspondent pas à l'occasion, et donc sérialisation binaire est pas toujours compatible entre .Net et Mono.

S'il vous plaît déposer un test avec Mono: http://www.mono-project.com/Bugs

Pour contourner ce problème, vous pouvez faire votre propre sérialisation pour votre classe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top