2010-09-26 6 views
8

sto incontrando questa eccezione nel mio progetto utilizzando Protobuf.net:protobuf.net sottotipo imprevisto

InvalidOperationException "Unexpected sub-type: foo" 

ho una classe che sto inviando che assomiglia a questo:

class message 
{ 
    list<bar> listOfBars; 
} 

pippo eredita dalla barra, tuttavia protobuf sembra soffocare su questo e generare l'eccezione sopra. C'è un modo per aggirare questo? Devo essere in grado di contenere tutti i diversi sottotipi di barre nell'elenco, quindi una soluzione di tipo più vincolata sarebbe difficile/impossibile.

risposta

14

posso sbagliarmi, ma penso che è necessario specificare la classe ereditata, che sottotipi ereditano da esso, per esempio:

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

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

Ci proverò, ci vorrà un po 'perché Bar e foo sono in progetti diversi. Immagino che dovrò giocherellare un po 'sulle dipendenze:/ – Martin

+0

Grazie, ha funzionato: D – Martin

+0

@ Martin - nessun problema. – GenericTypeTea

0

io non sono al 100% sui buffer di protocollo, e forse io' m way off base qui ma stai pensando che List è assegnabile da List in cui Bar eredita da Foo? Questo non è il caso - sono considerati due diversi tipi senza relazione. In .NET 4, i parametri di tipo covariante sono supportati ma richiede il supporto dalla raccolta (che List non offre nemmeno in .NET 4, in quanto si tratta di una modifica irrisolta - probabilmente il codice più vecchio che tenta di farlo è comunque rotto, ma è ancora un cambiamento di comportamento)

+0

Non sto assumendo la covarianza, voglio semplicemente una lista che posso aggiungere (foo) a. – Martin