protobuf.net意外的子类型

我在使用Protobuf.net的项目中遇到此exception:

InvalidOperationException "Unexpected sub-type: foo" 

我有一个我要发送的类,如下所示:

 class message { list listOfBars; } 

fooinheritance了bar,但是protobuf似乎对此产生了阻碍并产生了上面的exception。 这有什么办法吗? 我需要能够在列表中保存所有不同的bar子类型,因此更难以/不可能采用更多类型约束的解决方案。

我可能弄错了,但我认为你需要在inheritance的类上指定哪些子类inheritance它,例如:

 [Serializable, ProtoContract, ProtoInclude(100, typeof(Foo))] class Bar { } [Serializable, ProtoContract] class Foo : Bar { } // Inherits from Bar 

我不是百分之百地使用协议缓冲区,也许我已经离开这里了,但是你认为List可以从List中分配,其中Barinheritance自Foo? 情况并非如此 – 它们被认为是两种不同的类型,没有关系。 在.NET 4中,支持协变类型参数,但它需要来自集合的支持(即使在.NET 4中也不提供List,因为这将是一个重大改变 – 可以说是旧代码,无论如何都试图破坏它,但它仍然是行为改变)