2

次の問題があります。

私のオブジェクトは次のようにシリアル化されています:

MemoryStream memorystream = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(memorystream, _policy);
CaptureData = Convert.ToBase64String(memorystream.ToArray());

次に、データベースに保存し、データベースに保存されたデータから必要に応じてシリアル化を解除しました。

私の問題は、このオブジェクトを変更したり、プロパティを追加したりできないことです。これにより、デシリアライゼーションが中断されるためです。

以前のオブジェクトのシリアル化を壊さずにプロパティを追加する方法について何か提案はありますか?

4

3 に答える 3

1

このシリアライザーを使用することは不可能だと思います。

可能であれば、プロトコル バッファなどの下位互換性を処理する別のシリアライザを使用します。

于 2012-12-06T10:32:06.053 に答える
1

[OptionalField]and similar を使用して、 .Net に組み込まれているバージョン トレラントなシリアル化を利用できます。

于 2012-12-06T10:34:21.983 に答える
0

ビルトインのシリアライゼーションから移行する必要があります。これはご覧のとおり、固定的でスケーラブルではありません。型のスケーラビリティとシステムの柔軟性を維持できる他のシリアル化手法を選択してください。

  • カスタム バイナリ シリアル化
  • xml シリアライゼーション
  • json シリアライゼーション
  • protobuf を使用したバイナリー・シリアライゼーション (ほんの一例です...)

あなたがそれを行うことができれば、これすべて。そうでない場合は、いくつかのアーキテクチャ上の (歴史的な) 制限について、ハムレットのコメントで提案されているようなことを行うことができます。しかし、それは私にとって大まかな解決策のように聞こえます。

于 2012-12-06T10:31:38.160 に答える