我在使用Protobuf.net的项目中遇到此异常:
InvalidOperationException "Unexpected sub-type: foo"
我有一个我要发送的课程,如下所示:
class message
{
list<bar> listOfBars;
}
foo继承了off bar,但是protobuf似乎对此产生了阻碍并产生了上面的异常。这有什么办法吗?我需要能够在列表中保存所有不同的bar子类型,因此更难以/不可能采用更多类型约束的解决方案。
答案 0 :(得分:17)
我可能错了,但我认为您需要在继承的类上指定哪些子类型从中继承,例如:
[Serializable, ProtoContract, ProtoInclude(100, typeof(Foo))]
class Bar { }
[Serializable, ProtoContract]
class Foo : Bar { } // Inherits from Bar
答案 1 :(得分:0)
我不是百分之百地使用协议缓冲区,也许我已经离开了这里,但你认为List可以从List中分配,其中Bar继承自Foo吗?情况并非如此 - 它们被认为是两种不同的类型而没有关系。在.NET 4中,支持协变类型参数,但它需要来自集合的支持(即使在.NET 4中也不提供List,因为这将是一个重大变化 - 可以说是旧代码,无论如何都试图破坏它,但它仍然是行为改变)