从RuntimeTypeModel中删除一个类型

时间:2015-05-06 15:07:54

标签: c# .net protobuf-net

我在配置protobuf-net(de)序列化时遇到问题。我有这个模型,抽象类A是未确定数量的子类的父类 - 让我们调用其中一种类型BAB位于不同的程序集中。 A位于库中,无法针对使用它的每种类型进行修改 为了解决这个问题,A有一个静态构造函数,可以在所有AppDomain程序集中查找从中继承的类型;并将这些类型添加为子类型。

问题是在某些情况下,AddSubType方法会抛出InvalidOperationException:

The type cannot be changed once a serializer has been generated...

经过检查,RuntimeTypeModel.Default.GetTypes()在调用B之前包含AddSubType类型,我认为这是问题所在。

所以我想我有3个解决方案:

  • 在将其添加为子类型之前,从配置的类型中删除B这可能吗?
  • 在protobuf发挥其魔力之前执行此逻辑。我甚至不知道该怎么做。是否存在某种类型的AppDomain加载事件?
  • ProtoContract删除B,并在添加子类型时在运行时完全配置它。似乎重新实现了protobuf-net自己的逻辑来做同样的事情。

你有什么建议吗?

编辑:如何使用PrepareSerializer?

正如所指出的,我理解Serializer.PrepareSerializer()是关键。然而,对于我所发现的东西,没有解释它在SO或其他任何地方的用法。如果我错了,请纠正我,但该方法会检测B是否继承自A并自动将其添加为子类型?
我尝试在父代和派生类型上使用它,在代码中的各个点,无济于事。

0 个答案:

没有答案