protobuf.net Неожиданный подтип - PullRequest
       20

protobuf.net Неожиданный подтип

9 голосов
/ 26 сентября 2010

Я столкнулся с этим исключением в моем проекте с использованием Protobuf.net:

InvalidOperationException "Unexpected sub-type: foo"

У меня есть класс, который я отправляю, который выглядит так:

class message
{
    list<bar> listOfBars;
}

foo наследует вне бара, однако protobuf, кажется, подавляет это и генерирует исключение выше. Есть ли способ обойти это? Мне нужно иметь возможность хранить все разные подтипы бара в списке, поэтому решение с более ограниченным типом будет трудным / невозможным.

Ответы [ 2 ]

17 голосов
/ 26 сентября 2010

Возможно, я ошибаюсь, но я думаю, что вам нужно указать на унаследованном классе, какие подтипы наследуют от него, например:

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

[Serializable, ProtoContract]
class Foo : Bar { } // Inherits from Bar
0 голосов
/ 26 сентября 2010

Я не на 100% на буферах протокола, и, может быть, я здесь далеко от базы, но вы думаете, что List можно назначить из List, где Bar наследует от Foo?Это не так - они считаются двумя разными типами без отношения.В .NET 4 поддерживаются ковариантные параметры типа, но для этого требуется поддержка из коллекции (которую List не предлагает даже в .NET 4, так как это было бы серьезным изменением - возможно, более старый код, пытающийся это сделать, все равно не работает, но все равноизменение поведения)

...