C# 从RuntimeTypeModel中删除类型

C# 从RuntimeTypeModel中删除类型,c#,.net,protobuf-net,C#,.net,Protobuf Net,配置protobuf网络(反)序列化时遇到问题。我有一个抽象类A是数量不确定的子类的父类的模型-让我们调用其中一种类型BA和B位于不同的程序集中A位于库中,不能针对使用它的每种类型进行修改。 为了处理这个问题,A有一个静态构造函数,它在所有AppDomain程序集中查找从它继承的类型;并将这些类型添加为子类型 问题在于,在某些情况下,AddSubType方法抛出InvalidOperationException: The type cannot be changed once a seriali

配置protobuf网络(反)序列化时遇到问题。我有一个抽象类
A
是数量不确定的子类的父类的模型-让我们调用其中一种类型
B
<代码>A和
B
位于不同的程序集中<代码>A位于库中,不能针对使用它的每种类型进行修改。
为了处理这个问题,
A
有一个静态构造函数,它在所有AppDomain程序集中查找从它继承的类型;并将这些类型添加为子类型

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

The type cannot be changed once a serializer has been generated...
经检查,
RuntimeTypeModel.Default.GetTypes()
在调用
AddSubType
之前包含type
B
,我认为这就是问题所在

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

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


编辑:如何使用PrepareSerializer?

如前所述,我理解
序列化程序。PrepareSerializer()
是关键。然而,对于我所发现的,在SO或其他任何地方都没有解释它的用法。如果我错了,请纠正我,但该方法将检测到
B
继承自
A
,并自动将其添加为子类型?

我在代码中的不同点尝试在父类型和派生类型上使用它,但都没有效果

在谷歌上搜索以下
C#PrepareSerializer方法
可能重复的