2 Stimmen

Mono, Serialisierbare Objekte mit MarshalByRefObject

Ich versuche, eine C#-Anwendung auf .NET (Client-Server) zu portieren, und bin in Probleme mit Serialisierung laufen.

Der Linux-Client serialisiert ein Objekt, aber der Windows-Server kann es nicht deserialisieren und gibt den Fehler aus:

System.Runtime.Serialization.SerializationException
Feld "MarshalByRefObject+__identity" nicht in Klasse gefunden

Die Deserialisierung erfolgt über BinaryFormatter:

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

Die betreffende Klasse hat das Attribut Serializable und erbt von MarshalByRefObject. Wenn ich die Vererbung von MarshalByRefObject entferne, funktioniert es gut. Alles funktioniert gut in Windows, und so bin ich der Annahme, dass dies ein Mono-spezifisches Problem ist.

Jede Hilfe/Ratschläge wären sehr willkommen ^_^

4voto

jpobst Punkte 9972

Die binäre Serialisierung beruht auf privaten Implementierungsdetails. In Ihrem Fall ist es das private Feld __identity. Da Mono-Entwickler 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 reichen Sie einen Testfall bei Mono ein: http://www.mono-project.com/Bugs

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X