2009-07-02 4 views
2

Je tente de porter une application C# sur .NET (serveur client) et je rencontre des problèmes de sérialisation.Mono, objets sérialisables avec MarshalByRefObject

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, cela fonctionne très bien. Tout fonctionne bien dans Windows, et donc je suppose que c'est un problème spécifique à Mono.

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

Répondre

4

sérialisation binaire repose sur les détails de mise en œuvre privée. Dans votre cas, le champ privé __identity. Étant donné que les développeurs Mono n'ont pas accès aux détails d'implémentation privés, ceux-ci ne correspondent parfois pas, et donc la sérialisation binaire n'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 personnalisé pour votre classe.

+0

:-) super !!! LoL ... – IAbstract