12

我在使用 Protobuf.net 的项目中遇到了这个异常:

InvalidOperationException "Unexpected sub-type: foo"

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

class message
{
    list<bar> listOfBars;
}

foo 继承了 bar,但是 protobuf 似乎对此感到窒息并产生上述异常。有没有办法解决这个问题?我需要能够在列表中保存所有不同的 bar 子类型,因此更受类型约束的解决方案将是困难/不可能的。

4

2 回答 2

19

我可能弄错了,但我认为您需要在继承的类上指定哪些子类型从它继承,例如:

[Serializable, ProtoContract, ProtoInclude(100, typeof(Foo))]
class Bar { }

[Serializable, ProtoContract]
class Foo : Bar { } // Inherits from Bar
于 2010-09-26T11:53:15.887 回答
0

我不是 100% 使用协议缓冲区,也许我在这里偏离了基础,但你是否认为 List 可以从 Bar 继承自 Foo 的 List 分配?事实并非如此——它们被认为是两种没有关系的不同类型。在 .NET 4 中,支持协变类型参数,但它需要集合的支持(即使在 .NET 4 中 List 也不提供,因为这将是一个重大更改 - 可以说尝试这样做的旧代码无论如何都会被破坏,但它仍然是行为改变)

于 2010-09-26T11:58:04.090 回答