2

連載の悩みは続く

クラスをシリアル化しようとしています。そのインスタンスは、それらの間で共通のオブジェクト (一種のバインダー) を共有します。したがって、オブジェクト A、B、C はオブジェクト Binder1 を共有し、オブジェクト D と E - Binder2 などを共有します... オブジェクト A、B、C、D、E をシリアル化しています。通常、このバインダー オブジェクトは、パラメーターなしのコンストラクターが必要なため、シリアライザーではなく、コンストラクターで渡されます。

ISeriazable には、シングルトンで機能するものがあるようです-IObjectReferenceインターフェイス。メソッドGetRealObjectを使用して、新しく作成されたシングルトンへの参照を返すことができます。XmlSerializerしかし、このインターフェースを気にしているようには見えません。

では、これらのオブジェクトをシリアライズ/デシリアライズするにはどうすればよいでしょうか?

編集: 2006年からフォーラムで議論されたこの質問を発見したので、この質問をあきらめる準備がほぼ整いまし. 過去 7 年間に状況が変わった場合に備えて、この質問はもう少し開いたままにします。

4

1 に答える 1

0

これを XmlSerializer でネイティブに行う方法が見つかりませんでした。Jon Skeet と Marc Gravell の間で、基本的に ISerializable と IObjectReference でできるのと同じ方法でこれを行うことはできないという古いスレッドを見つけました。

この作業を行うために必要な方法は、次のとおりです。

  • Guid フィールドを Binder オブジェクト (つまり、複数のオブジェクトによって共有される共通オブジェクト) に追加します。
  • 逆シリアル化中に、静的ディクショナリを使用し、同じ Guid を持つ既に登録されている Binder オブジェクトを使用するか、他のユーザーがリンクできるように新しい Binder オブジェクトを静的ディクショナリに追加します。
于 2013-07-16T14:20:31.240 に答える