2009-07-02 13 views
2

C#アプリケーションを.NET(クライアントサーバー)に移植しようとしていますが、シリアル化に関する問題が発生しています。MarshalByRefObjectを持つMono、Serializableオブジェクト

Linuxクライアントは、シリアライズしたオブジェクトが、Windowsサーバがエラーを与えて、それをデシリアライズすることができません:

System.Runtime.Serialization.SerializationException
フィールド「のMarshalByRefObject + __アイデンティティは」クラス

では見られません

デシリアライズがにBinaryFormatterを介して行われます:問題の

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

クラスはSerializable属性を持ち、MarshalByRefObjectから継承します。私がMarshalByRefObjectの継承を削除してもうまくいきます。 Windowsではすべてがうまく動作するので、これはMono固有の問題であると仮定しています。

すべてのヘルプ/アドバイスをいただければ幸いです^ _^

答えて

4

バイナリシリアル化は、プライベート実装の詳細に依存しています。あなたの場合、プライベートフィールド__identity。モノの開発者はプライベートな実装の詳細にアクセスすることができないため、これらが一致しないことがあり、バイナリのシリアル化が.NetとMonoの間で常に互換性があるとは限りません。

モノでテストケースを提出してください: http://www.mono-project.com/Bugs

は、この問題を回避するには、あなたのクラスのために独自のカスタムシリアライズを行うことができます。

+0

:-) great !!!笑... – IAbstract

関連する問題