我有一个带有插件架构的应用程序。插件有自己的数据容器,它们都继承自基本接口 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 事件来提供自定义映射)
异常提示我可以通过事件提供格式,但我看不出这有什么帮助,因为问题是我没有可用的类型。在这些情况下,我想做的是完全忽略反序列化该对象。在这些情况下,列表项甚至可以默认为基类的虚拟实例。但是如何做到这一点?