2009-07-02 10 views
2

Ich versuche, eine C# -Anwendung auf .NET (Client-Server) portieren, und Probleme mit der Serialisierung.Mono, serialisierbare Objekte mit MarshalByRefObject

Die Linux-Client serialisiert und Objekt, aber der Windows-Server ist nicht in der Lage, es zu deserialisieren, den Fehler geben:

System.Runtime.Serialization.SerializationException
Feld "MarshalByRefObject + __ Identität" nicht in der Klasse gefunden

Deserialisierung wird über BinaryFormatter getan:

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

die Klasse in Frage, die Serializable-Attribut hat, und erbt von MarshalByRefObject. Wenn ich die Vererbung von MarshalByRefObject entferne, funktioniert es gut. Alles funktioniert gut in Windows, und ich nehme an, dass dies ein Mono-spezifisches Problem ist.

Jede Hilfe/Beratung würde sehr geschätzt^_^

Antwort

4

Binary Serialisierung auf private Details der Implementierung beruht. In Ihrem Fall ist das private Feld __identity. Da Monoentwickler keinen Zugriff auf die privaten Implementierungsdetails haben, stimmen diese gelegentlich nicht überein, und daher ist die binäre Serialisierung nicht immer kompatibel zwischen .Net und Mono.

Bitte einen Testfall mit Mono-Datei: http://www.mono-project.com/Bugs

Um dies zu umgehen, können Sie Ihre eigene benutzerdefinierte Serialisierung für Ihre Klasse tun.

+0

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

Verwandte Themen