2

オブジェクトキャッシュをディスクにシリアル化して、次にプログラムがロードされるときにロードできるようにしようとしています。保存されるクラスの機能の1つは、他のオブジェクトへの参照が含まれていることです。例:リモートURL、ローカルファイルパス、ダウンロードされている場合などを保存する画像クラスのリストがあります。次に、可視性をダウンロード済みにバインドし、ソースをローカルファイルパスにバインドします。他のオブジェクトにはこの画像への参照があるため、画像がダウンロードされると、画像は1回更新され、すべてのバインディングは、画像を指しているすべてのアイテムにわたって更新されます。

簡単な修正として、バイナリフォーマッターを実装しましたが、すべて正しく機能しています。すべてのリストはディスクにシリアル化され、それらをリロードするとすべての参照が残ります(IE 1イメージオブジェクトが作成され、それを使用するすべてのものに参照があります。逆シリアル化では、表示されるたびにImageの新しいインスタンスが作成されます)

私の質問は、参照を壊さずにディスクに保存するためにどのような種類のシリアリエを使用する必要があるかということです。BinaryFormatterは、ディスクにシリアル化し、さまざまなリリースで機能することを期待するための悪い選択であることを読みました。これまでのところ問題はありませんが、1年後に問題が発生して、すべてのユーザーに強制的にキャッシュされたすべてのメタデータを再取得したくありません。

さまざまなシリアライザーがどのように機能するかは100%わかりませんが、XMLを使用する場合は、何らかのコンバーターを作成する必要があると思います。それが役立つ場合は、すべての画像オブジェクトにGUIDが割り当てられているため、すべてのオブジェクトに固有の何かがあります。

更新:似たような次の質問を見つけましたシリアル化/逆シリアル化によるオブジェクト参照の維持 Datacontractserializerが、アプリケーションのさまざまなバージョンにわたる長期シリアル化ストレージに適しているかどうかを教えてもらえますか?binaryformatterの欠点と比較してください。

4

3 に答える 3

0

コンバーターなどは必要ありません。これをチェックしてください。

http://www.switchonthecode.com/tutorials/csharp-tutorial-xml-serialization

于 2012-07-10T10:15:32.787 に答える
-1

MongoDbが役立つ場合があります。C# または他のタイプのデータベースについてはMongoDBを参照してください: DB4Object

SQLiteは便利なようです。画像をバイナリとして保存するには、blobを使用します。

于 2012-07-10T10:16:06.327 に答える
-1

SqLiteが役立つかもしれません。使いやすいです。

于 2012-07-10T10:18:46.670 に答える