2010-09-26 4 views
8

Je rencontre cette exception dans mon projet en utilisant Protobuf.net:protobuf.net sous-type inattendu

InvalidOperationException "Unexpected sub-type: foo" 

J'ai une classe que je vous envoie ce qui ressemble à ceci:

class message 
{ 
    list<bar> listOfBars; 
} 

foo hérite de la barre, cependant protobuf semble s'étouffer et générer l'exception ci-dessus. Y-a-t-il moyen de faire autrement? Je dois être capable de contenir tous les sous-types différents de barres dans la liste, donc une solution avec plus de contraintes de type serait difficile/impossible.

Répondre

14

Je peux me tromper, mais je pense que vous devez spécifier la classe héritée qui sous-types héritent de, par exemple:

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

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

Je vais essayer ça, ça prendra du temps car Bar et foo sont dans des projets différents. Je suppose que je vais devoir bidouiller un peu autour des dépendances:/ – Martin

+0

Merci, ça a marché: D – Martin

+0

@Martin - pas de problème. – GenericTypeTea

0

Je ne suis pas 100% sur les tampons de protocole, et peut-être je m loin de la base ici, mais pensez-vous que List est assignable à partir de la liste où Bar hérite de Foo? Ce n'est pas le cas - ils sont considérés comme deux types différents sans relation. Dans .NET 4, les paramètres de type covariant sont supportés mais nécessitent un support de la collection (que List n'offre même pas dans .NET 4, car ce serait un changement de rupture - peut-être un code plus ancien qui est cassé de toute façon, mais un changement de comportement)

+0

Je ne suppose pas de covariance, je veux simplement une Liste que je peux ajouter (foo) à. – Martin