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を呼び出すと、「不明なサブタイプ:VenueQueryRequestV1」が表示されます。
電話をかける前に追加(置換ではない)した場合
RuntimeTypeModel.Default[typeof(QueryRequest)].AddSubType(10, typeof(VenueQueryRequest));
RuntimeTypeModel.Default[typeof(QueryRequest)].AddSubType(11, typeof(VenueQueryRequestV1));
「重複するフィールド番号が検出されました。10on:Designertech.AzureServices.Messages.QueryRequest」が表示されます。2番目のものだけを追加すると、同じエラーが発生しますが、10ではなく11になります。
交換すると元のエラーが発生します
これにより、サブタイプについて知っている必要があるように見えます
キャストやどこかで物事を台無しにする可能性はありますか?現時点では、基本クラスのみにプロパティが宣言されています。
[ProtoMember(1)]
IList<string> RequestedFields
これは私を狂わせています。
余談ですが、これはCloudFX AzureServiceBusフレームワークに送られるメッセージを生成するために使用されています。