0

逆シリアル化するときに、シリアル化されたストリームの次の「エントリ」をスキップする可能性はありますか? プラグイン指向のアーキテクチャに関しては、シリアル化されたオブジェクト グラフの個別の部分が、別の環境では不明なタイプになる可能性があります (無視しても問題ないと仮定してください)。もちろん、これらをデシリアライズしようとすると失敗します。

abstract class Thing{}
class OneThing : Thing {}  // <-- known in environment A & B
class SomeThing : Thing {} // <-- only known in environment A
...
var things = new List<Thing>();
...
things.Add(  (OneThing)(formatter.Deserialize(stream)) );
things.Add( (SomeThing)(formatter.Deserialize(stream)) ); // <-- skip in B
things.Add(  (OneThing)(formatter.Deserialize(stream)) );

これをバイナリフォーマッタで動作させるにはどうすればよいですか? 長さを計算し、シリアル化されたエントリの明確な型名 (文字列など) を取得し、エントリ自体の直前に格納する必要がありますか? (ストリーム ポインタをインクリメントすることによって) 逆シリアル化するときにスキップできますか? または、シリアル化された表現の問題固有の操作が少ない、より良い代替手段はありますか?

4

3 に答える 3