質問

私はポートに.NET(クライアント・サーバ)へのC#アプリケーションをしようとしていて、シリアル化の問題に実行しています。

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

System.Runtime.Serialization.SerializationException
フィールド "のMarshalByRefObject + __アイデンティティ" クラスでは見られない。

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

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

問題のクラスはSerializable属性を持ち、MarshalByRefObjectから継承します。私はMarshalByRefObjectを継承を削除した場合、それが正常に動作します。すべてがWindowsで正常に動作し、私は、これはモノ固有の問題であると仮定しています。

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

役に立ちましたか?

解決

バイナリシリアル化は、プライベート実装の詳細に依存しています。あなたのケースでは、プライベートフィールド__identity。モノの開発者は、プライベート実装の詳細へのアクセスを持っていないので、これらは時折一致していないので、バイナリシリアルは常に.NETとモノとの互換性がありません。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top