2012-12-09 62 views
2

我有一個3級繼承圖。 protobuf的2.0.0.611Proto-Buf繼承問題

QueryRequest 
VenueQueryRequest 
VenueQueryRequestV1 

所有帶

[DataContract, System.Serializable, ProtoBuf.ProtoContract] 

QueryRequest包括:

[ProtoInclude(10, typeof(VenueQueryRequest))] 
[ProtoInclude(11, typeof(VenueQueryRequestV1))] 

當我打電話SerializeWithLengthPrefix了VenueQueryRequestV1我得到 「未知子類型:VenueQueryRequestV1」

如果我在添加(不替換)之前做一個NY電話

RuntimeTypeModel.Default[typeof(QueryRequest)].AddSubType(10, typeof(VenueQueryRequest)); 
RuntimeTypeModel.Default[typeof(QueryRequest)].AddSubType(11, typeof(VenueQueryRequestV1)); 

我得到「重複字段號檢測; 10:Designertech.AzureServices.Messages.QueryRequest」 如果我只添加第二個,我得到了同樣的錯誤,但與11而不是10

如果我更換,我得到的原始錯誤

這使得它看起來對我來說,它應該知道的分型

我是否有可能搞亂的東西了澆注或者什麼地方? 目前,只有基類上有聲明的任何屬性。

[ProtoMember(1)] 
IList<string> RequestedFields 

這使我瘋狂。

順便說一句,這是用來產生消息,以饋入CloudFX Azure服務總線框架。

回答

3

每個級別只需要通知直接子類型:

[ProtoContract, ProtoInclude(10, typeof(VenueQueryRequest)) 
Class QueryRequest {...} 

[ProtoContract, ProtoInclude(11, typeof(VenueQueryRequestV1)) 
Class VenueQueryRequest : QueryRequest {...} 

[ProtoContract] 
class VenueQueryRequestV1 : VenueQueryRequest {...} 
+0

知道它會在臉上的某個地方盯着我。太感謝了。 –