我有一个3级继承图。 ProtoBuf 2.0.0.611
QueryRequest
VenueQueryRequest
VenueQueryRequestV1
全部标有
[DataContract, System.Serializable, ProtoBuf.ProtoContract]
QueryRequest包括:
[ProtoInclude(10, typeof(VenueQueryRequest))]
[ProtoInclude(11, typeof(VenueQueryRequestV1))]
当我为VenueQueryRequestV1调用SerializeWithLengthPrefix时,我得到“Unknown sub-type:VenueQueryRequestV1”
如果我在拨打电话之前添加(不替换)
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 Service Bus框架的消息。
答案 0 :(得分:3)
每个级别只需要通知直接子类型:
[ProtoContract, ProtoInclude(10, typeof(VenueQueryRequest))
Class QueryRequest {...}
[ProtoContract, ProtoInclude(11, typeof(VenueQueryRequestV1))
Class VenueQueryRequest : QueryRequest {...}
[ProtoContract]
class VenueQueryRequestV1 : VenueQueryRequest {...}