1

.NET ランタイム シリアル化を使用してオブジェクトを分離ストレージに格納するアプリケーションを構築しています。
シリアル化するオブジェクトのクラスにいくつかの新しいプロパティを追加してアプリケーションを更新すると、問題が発生します。そのため、分離ストレージ内のオブジェクトの何らかのバージョン管理を行い、デシリアライズする前にオブジェクトが廃止されていないかどうかを確認できるようにします。

これを可能な限り最善の方法で行うためのアドバイスやアイデアはありますか?

IFormatter インターフェイスを実装するカスタム フォーマッタについてどう思いますか? オブジェクトを vesioning する代わりに役立ちますか?

この問題については、MS フォーラムで詳しく説明しています

4

4 に答える 4

1

Marc Gravell は、バージョン トレラントなシリアライザーを使用するという素晴らしいアイデアをコメントで提案しました。廃止されたオブジェクトを再利用可能にするためにも、デシリアライゼーションを十分に制御できます。msdnの詳細

提案してくれてありがとう。

于 2010-11-08T09:43:12.790 に答える
1

バイナリ シリアル化の場合、バイトを直接読み取り、これからアセンブリ バージョンを特定できます。バイト番号 22 以降には、アセンブリとオブジェクトの種類に関する情報が含まれているため、これを読み取る何かを記述して、オブジェクトが廃止されたかどうかを判断できます。

于 2010-10-20T17:52:40.693 に答える
1

シリアライゼーションでシリアライゼーションを行うことができます。まず、バージョンを伝え、内部の真のクラスを保持するラッパー クラス。

しかし、これはちょっと臭いが気になります..

于 2010-10-20T12:55:36.073 に答える
1

以下にいくつかのオプションを示します (任意の順序で)。

  • バージョンに基づいてファイルに名前を付けます
  • バージョンに基づいてディレクトリにファイルを配置します
  • バージョン番号など、シリアル化された各オブジェクトに関するメタデータを含むラッパー オブジェクトを作成します。
  • 永続化アプリケーションのバージョン番号を含む各オブジェクトにプロパティを追加します
于 2010-10-20T12:58:03.057 に答える