2010-09-26 7 views
8

Estoy encontrando esta excepción en mi proyecto usando Protobuf.net:protobuf.net subtipo inesperado

InvalidOperationException "Unexpected sub-type: foo" 

He una clase que estoy enviando que tiene este aspecto:

class message 
{ 
    list<bar> listOfBars; 
} 

foo hereda la barra, Sin embargo, protobuf parece ahogarse con esto y generar la excepción anterior. ¿Hay alguna forma de evitar esto? Necesito poder contener todos los subtipos diferentes de barras en la lista, por lo que una solución más restringida sería difícil/imposible.

Respuesta

14

puedo estar equivocado, pero creo que es necesario especificar en la clase heredada cuales subtipos heredan de ella, por ejemplo:

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

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

Lo intentaré, tomará un tiempo porque Bar y foo están en proyectos diferentes. Supongo que tendré que jugar un poco con las dependencias un poco:/ – Martin

+0

Gracias, eso funcionó: D – Martin

+0

@Martin - no hay problema. – GenericTypeTea

0

no estoy 100% en búferes de protocolo, y tal vez' Estoy fuera de la base aquí, pero ¿estás pensando que la Lista es asignable desde la Lista donde Bar hereda de Foo? Este no es el caso; se consideran dos tipos diferentes sin relación. En .NET 4, los parámetros de tipo covariantes son compatibles pero requieren soporte de la colección (que List no ofrece incluso en .NET 4, ya que esto sería un cambio radical, posiblemente código más antiguo que intenta que esto se rompa de todos modos, pero sigue siendo un cambio en el comportamiento)

+0

No estoy asumiendo la covarianza, simplemente quiero una lista a la que puedo agregar (foo). – Martin