Frage

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

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

System.Runtime.Serialization.SerializationException
Das 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 hat das Attribut Serializable und erbt von MarshalByRefObject. Wenn ich das Erbe von MarshalByRefObject entfernen, es funktioniert gut. Alles funktioniert in Windows, fein und so gehe ich davon aus das ist ein Mono spezifisches Problem.

Jede Hilfe / Rat wäre sehr ^ _ ^

geschätzt werden
War es hilfreich?

Lösung

Binary Serialisierung beruht auf privaten Implementierungsdetails. In Ihrem Fall der privaten Bereich __identity. Da Mono-Entwickler keinen Zugriff auf die privaten Details der Implementierung hat, diese gelegentlich nicht übereinstimmen, und somit binäre Serialisierung ist 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top