2012-02-07 8 views
3

CustomLineCapにはSerializableAttributeが適用されていません。CustomLineCapクラスのインスタンスをシリアル化する方法

このタイプのプロパティを、現在BinaryFormatterでシリアル化/逆シリアル化されているオブジェクトグラフに追加したいとします。

私はXMLシリアル化に切り替えようとしましたが、余分な要件があり、そのespに騙されたくありません。それは私のコードではないからです。それは私がダウンロードしたオープンソースの一部です。

BinaryFormatterにプロパティを無視する方法がある場合は、それが機能する可能性があります。

私はそれをむしろサブクラス化したいと思います。それがうまくいくかどうかわかりません。

+0

あなたはCustomLineCapを意味しますか? CustomEndCapという実際のクラスを見つけることができないようです。 – tyranid

答えて

1

CustomLineCap classのインスタンスを直接シリアル化することはできません。それはMarshalByRefObject classから派生し、それはにシリアル化されないことを示す指標ではありませんが、ほぼの場合は常にです。

通常、MarshalByRefObjectクラスは、それから派生したオブジェクトがインスタンスが存在するアプリケーションドメイン内にコンテキストしか持たないという指標であるためです。この場合、CustomLineCapインスタンスはGDI objectであり、処理中には意味があります(ハンドルに明示的に関連付けられています)。私はあなたがシリアライズしてからそれを公開し、シリアライズしたいCustomLineCapインスタンスのプロパティをキャプチャするラッパーを作成するadapter patternを使用してお勧めしたい、と述べた

のクラスは、特定のドメインに関連付けられたコンテキストを持ち、そのドメイン外で永続化されても意味をなさない特定のドメインで使用するアプローチです。

SerializableAttributeをサブクラスに適用すると、すべてのフィールド(あなたがアクセスできないプライベートフィールドも含めて)がシリアル化されることになり、サブクラス化はこのシナリオでは機能しませんそれらが作成されたアプリケーションドメイン内のコンテキストのみを持つハンドル。

関連する問題