I'm encountering this Exception in my project using Protobuf.net:
InvalidOperationException "Unexpected sub-type: foo"
I have a class which I'm sending which looks like this:
class message
{
list<bar> listOfBars;
}
开发者_JAVA百科
foo inherits off bar, However protobuf seems to choke on this and generate the exception above. Is there some way around this? I need to be able to hold all different subtypes of bar in the list, so a more type constrained solution would be difficult/impossible.
I may be mistaken, but I think you need to specify on the inherited class which subtypes inherit from it, for example:
[Serializable, ProtoContract, ProtoInclude(100, typeof(Foo))]
class Bar { }
[Serializable, ProtoContract]
class Foo : Bar { } // Inherits from Bar
I'm not 100% on protocol buffers, and maybe I'm way off base here but are you thinking that List is assignable from List where Bar inherits from Foo? This is not the case - they are considered two different types with no relation. In .NET 4, covariant Type parameters are supported but it requires support from the collection (which List does not offer even in .NET 4, as this would be a breaking change - arguably older code that attempts this is broken anyway, but it's still a change in behaviour)
精彩评论