はい、protobuf-netは.protoファイルなしで動作します。実際、protobuf-netの場合、コアは.protoサポートよりずっと前に作成されていました。必要なのは、シリアル化するメンバーごとに一意の番号を取得できるようにすることだけです。「v2」(リリースされていない)ではこれを外部で行うことができますが、利用可能なdllではこれは属性を意味します。これは、特注のprotobuf-net属性にすることも、(たとえば)DataContractSerializer
より便利な場合は属性を使用することもできます。
[DataContract]
public class Foo {
[DataMember(Order=1)]
public int Abc {get;set;}
[DataMember(Order=2)]
public string Def {get;set;}
}
.protoファイル()の生成はサポートされていますが、いくつかの注意点があります。Serializer.GetProto
- protobuf-netは継承をサポートしています。Googleのprotobuf仕様には継承の定義はありません。相互運用が将来の懸念事項であると思われる場合は、継承を回避するのが最善かもしれません(ただし、それを解釈する方法はあります。probofuf-netは常に有効なprotobufストリームを出力します)
- 他の複雑なタイプは解釈が必要な場合があります。たとえば、while
float
とdouble
protobufタイプ(すべての実装で使用可能)に直接マップしますが、これはandには当てはまりません。相互運用性が問題であると思われる場合は、最初からこれを単純化する価値があるかもしれません。たとえば、オフセットを表すを代わりにエポックに送信することを決定しますか?どの実装でも簡単に解釈できます。decimal
DateTime
DateTime
long