2011-01-21 20 views
2

私は第三者dllを持っています。それから私はいくつかのタイプのオブジェクトを受け取る(私はそのインターフェイスを知っているが、すべてのオブジェクトではない)。このオブジェクトは直列化可能とマークされておらず、私はそのlibruaryの開発には全く関係していません。.NETで直列化できないオブジェクトをシリアライズする方法

私はそれをいくつかのストレージにシリアル化してから、同じ状態(public/private、referencesなど)の後にのストレージから受け取りたいとします。私はここでひとつのオプションを得ました。唯一の違いを持つ.NETシリアライザと同じように動作する独自のシリアライゼーションメカニズムを作成します。シリアライゼーション属性は変更されません。

これが最善の方法ですか?

ありがとうございました。

+1

XmlSerializerはすべてをシリアル化しませんか? – CodingBarfield

+2

いいえ。シリアル化可能な属性でマークされたオブジェクトのみ。 –

+0

XmlSerializerは非常に制限されています。例えば、循環オブジェクトグラフをサポートしていません。 – CodesInChaos

答えて

0

XmlSerializerまたはDataContractSerializerを使用して、SerializableAttributeとマークされていないタイプをシリアル化できます。

その他のオプションがあります。何もあなたのために働く場合、常にカスタム実装を進めることができます。

+0

私はオブジェクトの公開契約のみを持っているので、リフレクションを使用しないとオプションではないようです。 –

+0

すべての型が 'XmlSerializer'で直列化可能であるわけではありません - 例えば' Dictionary <> '型です。 –

+0

@Phil、はい、そういうわけで、OPがどんなオブジェクトと連携しているかを知る必要があります。それ以外の場合、回答は抽象的なままであり、OPシナリオで最良のソリューションを選択するためのターゲットにすることはできません。 –

0

自分のクラスをそのオブジェクトから継承してシリアル化することができます。
または、そのクラスの独自のレプリカを作成して、明示的(または暗黙的ですが推奨されない)変換メソッドを作成できます。

+0

私は、インターフェイスとその継承オブジェクトをシリアル化する必要があります。私はどのようなオブジェクトを使用するかわからないし、それを継承する機会がありません。 –

+0

'MyObj.GetType()'は手がかりを得るのに役立つかもしれません。 – Vercas

+0

実行時継承のGetType()?それはクールかもしれない:)。しかし、私はすべての参照されたオブジェクトで同じことをする必要があります。つまり、タスクが不可能になります:) –

関連する問題