2010-09-26 46 views
8

我遇到使用Protobuf.net在我的項目此異常:protobuf.net意外亞型

InvalidOperationException "Unexpected sub-type: foo" 

我有我送其中的一類是這樣的:

class message 
{ 
    list<bar> listOfBars; 
} 

foo繼承吧,但protobuf似乎在這個窒息併產生上述異常。有沒有辦法解決這個問題?我需要能夠在列表中保存所有不同的子類型,因此更多類型的約束解決方案將很難/不可能。

回答

14

我可能是錯誤的,但我認爲你需要指定繼承的類亞型繼承它,例如:

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

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

我會嘗試,這將需要一段時間,因爲酒吧和富都在不同的項目。我想我將不得不繞過依賴關係一點點:/ – Martin 2010-09-26 11:56:56

+0

Thankyou,工作:D – Martin 2010-09-26 12:11:19

+0

@Martin - 沒問題。 – GenericTypeTea 2010-09-26 14:48:11

0

我不是協議緩衝區100%,也許我在這裏的基礎,但你是否認爲列表可以從列表中分配從哪裏酒吧繼承Foo?情況並非如此 - 它們被認爲是兩種不同的類型,沒有任何關係。在.NET 4中,支持協變類型參數,但它需要來自集合的支持(即使在.NET 4中,List也不提供此類參數,因爲這將是一次重大更改 - 無論如何,嘗試此操作的舊代碼無論如何都是中斷的,但仍然存在行爲上的變化)

+0

我不假設協變,我只是想要一個列表,我可以添加(foo)。 – Martin 2010-09-26 12:12:18