我在配置protobuf-net(de)序列化时遇到问题。我有这个模型,抽象类A
是未确定数量的子类的父类 - 让我们调用其中一种类型B
。 A
和B
位于不同的程序集中。 A
位于库中,无法针对使用它的每种类型进行修改
为了解决这个问题,A
有一个静态构造函数,可以在所有AppDomain程序集中查找从中继承的类型;并将这些类型添加为子类型。
问题是在某些情况下,AddSubType
方法会抛出InvalidOperationException:
The type cannot be changed once a serializer has been generated...
经过检查,RuntimeTypeModel.Default.GetTypes()
在调用B
之前包含AddSubType
类型,我认为这是问题所在。
所以我想我有3个解决方案:
B
。 这可能吗? ProtoContract
删除B
,并在添加子类型时在运行时完全配置它。似乎重新实现了protobuf-net自己的逻辑来做同样的事情。你有什么建议吗?
编辑:如何使用PrepareSerializer?
正如所指出的,我理解Serializer.PrepareSerializer()
是关键。然而,对于我所发现的东西,没有解释它在SO或其他任何地方的用法。如果我错了,请纠正我,但该方法会检测B
是否继承自A
并自动将其添加为子类型?
我尝试在父代和派生类型上使用它,在代码中的各个点,无济于事。