protobuf は継承をサポートしていないことがわかりました。別の端で protoc-c を使用しているため、拡張機能も使用したくありません。ただし、継承に依存する C# モデルに固執しています。
class Header {
public int version { get; set; }
}
class Message : Header {
public String message { get; set; }
}
継承をワイヤ形式のカプセル化に切り替えて、次のようにしようとしました。
[ProtoContract]
class Header {
[ProtoMember(1)]
public int version { get; set; }
}
[ProtoContract]
class Message : Header {
[ProtoMember(1)]
public Header Header { get { return this; } set { } }
[ProtoMember(2)]
public String Message { get; set; }
}
次に、「予期しないサブタイプ」エラーが表示され、次のように促さ れます。[ProtoInclude] を使用する必要があるのはなぜですか?
私のケースは上記の質問のケースとは異なると思いますので、継承を裏返しにしようとした私の特定のケースについてもう一度お尋ねしたいのですが、これは ProtoInclude なしでは不可能ですか?
そうでない場合、v2 でどのように行うのですか?
----- 編集済み ------
C(protobuf-cを使用)側の私のprotoファイルは次のようなものです:
message Header {
optional int32 version = 1;
}
message Message {
optional Header header = 1;
optional string message = 2;
}
ヘッダー内にメッセージを配置したくありません。また、ネットワーク経由の継承機能も必要ありません。この形式を使用すると、メッセージ メッセージを変更する必要なく、簡単にヘッダー メッセージに内容を追加できます。