プラグインアーキテクチャのアプリケーションがあります。プラグインには独自のデータコンテナがあり、それらはすべてベースインターフェイスIPluginDataStorageから継承します。状態を保持するためにシリアル化されるDataStorageオブジェクトには、他のデータとともにこれらのサブクラスのリストが含まれています。DynamicTypeフラグはtrueに設定されています。これは、実行時にどのプラグインが使用されているかがわからないためです。
[Serializable]
[ProtoContract]
public class DataStorage
{
[ProtoMember(200, DynamicType = true)]
public List<IPluginDataContainer> PluginDataStorage { get; set; }
このセットアップをシリアル化すると問題なく動作しますが、リストを確実に逆シリアル化するのに問題があります。シリアル化されたときに使用されたすべてのプラグインにアクセスせずにオブジェクトを逆シリアル化しようとすると、当然、型が欠落しているという例外が発生します。
タイプを解決できません:NOSMemoryConsumptionPlugin.NOSMemoryConsumptionData、NOSMemoryConsumptionPlugin、Version = 1.2.0.17249、Culture = neutral、PublicKeyToken = null(TypeModel.DynamicTypeFormattingイベントを使用してカスタムマッピングを提供できます)
例外は、イベントを通じてフォーマットを提供できるというヒントを与えますが、問題はそのタイプが利用できないことであるため、それがどのように役立つかわかりません。このような場合に私がしたいのは、そのオブジェクトの逆シリアル化を完全に無視することです。このような場合、リストアイテムはデフォルトで基本クラスのダミーインスタンスになることもあります。しかし、これを行う方法は?