2010-09-26 20 views
8
Ben Protobuf.net kullanarak Projemde bu İstisna karşılaşmak ediyorum

: Ben yolluyorum Bir sınıf şuna benzer olanprotobuf.net Beklenmeyen alt tip

InvalidOperationException "Unexpected sub-type: foo" 

:

class message 
{ 
    list<bar> listOfBars; 
} 

foo bardan miras alır, ancak protobuf bunun üzerine basar ve yukarıdaki istisnayı oluşturur. Bunun etrafında bir yolu var mı? Listedeki tüm farklı alt tip çubukları tutabilmem gerekiyor, bu yüzden daha fazla kısıtlı bir çözüm zor/imkansız olurdu.

cevap

14

yanılmış olabilir, ama örneğin, alt tipleri ondan devralan miras sınıfı belirtmek gerek:

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

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

Bunu deneyeceğim, biraz zaman alacak çünkü Bar ve foo farklı projelerde. Sanırım dependanileri biraz kandırmak zorunda kalacağım:/ – Martin

+0

Teşekkür ederim: D – Martin

+0

@Martin - sorun yok. – GenericTypeTea

0

Ben protokol tamponları% 100 değilim ve belki ben Burada üssü kapalı ama Listenin, Bar'ın Foo'dan miras aldığı Listeden atanabileceğini mi düşünüyorsun? Bu durum böyle değil - ilişkisiz iki farklı tip olarak kabul edilir. .NET 4'te, kovariant Type parametreleri desteklenir ancak koleksiyondan destek alması gerekir (bu liste, bir kırılma değişikliği olacağı için .NET 4'te bile sunmaz. Bu, yine de deneyen eski bir kod daha bozulur, ancak yine de Davranışta bir değişiklik)

+0

Kovaryans kabul etmiyorum, ben sadece (foo) ekleyebileceğim bir Liste istiyorum. – Martin