2012-12-09 104 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

知道它会在脸上的某个地方盯着我。太感谢了。 –