Proto-Buf继承问题

时间:2012-12-09 20:28:52

标签: protobuf-net

我有一个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框架的消息。

1 个答案:

答案 0 :(得分:3)

每个级别只需要通知直接子类型:

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

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

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