2010-09-26 9 views
8

ja napotykają ten wyjątek w moim projekcie korzystając Protobuf.net:protobuf.net Nieoczekiwany podtyp

InvalidOperationException "Unexpected sub-type: foo" 

Mam klasy, który wyślę który wygląda następująco:

class message 
{ 
    list<bar> listOfBars; 
} 

foo dziedziczy pasek, jednak protobuf wydaje się dławić i generować powyższy wyjątek. Czy jest jakiś sposób obejścia tego? Muszę mieć możliwość przechowywania wszystkich różnych podtypów słupka na liście, więc rozwiązanie bardziej ograniczające typ będzie trudne/niemożliwe.

Odpowiedz

14

mogę się mylić, ale myślę, że trzeba określić na dziedziczonej klasy, która podtypy dziedziczą z niego, na przykład:

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

[Serializable, ProtoContract] 
class Foo : Bar { } // Inherits from Bar 
+0

Spróbuję, zajmie to trochę czasu, ponieważ Bar i foo są w różnych projektach. Sądzę, że będę musiał trochę skrzywdzić relacje:/ – Martin

+0

Dziękuję, zadziałało: D – Martin

+0

@Martin - nie ma problemu. – GenericTypeTea

0

nie jestem 100% na buforach protokołu, a może ja” odejście stąd, ale czy myślisz, że List można przypisać z Listy, gdzie Bar dziedziczy z Foo? Tak nie jest - są uważane za dwa różne typy bez związku. W .NET 4, parametry kowariantne Typu są obsługiwane, ale wymagają wsparcia z kolekcji (której Lista nie oferuje nawet w .NET 4, ponieważ byłaby to zmiana zerwania - prawdopodobnie starszy kod, który próbuje to zrobić, jest uszkodzony, ale nadal jest zmiana zachowania)

+0

Nie zakładam kowariancji, po prostu chcę List , który mogę dodać (foo) do. – Martin