protocol buffersでエンコードしたいグラフデータ構造があります。グラフの頂点間には循環的な接続があります。 protobufでそのような構造をコード化するための標準/共通の方法はありますか?考えられる1つのアプローチは、各頂点に「id」フィールドを追加し、ポインタの代わりにこれらのIDを使用することです。例えば:プロトコルバッファを使用した循環データ構造(有向グラフなど)の符号化
message Vertex {
required int32 id = 1;
required string label = 2;
repeated int32 outgoing_edges = 3; // values should be id's of other nodes
}
message Graph {
repeated Vertex vertices = 1;
}
それから私はいるProtobufで生成されたクラスをラップするクラスを書くことができ、かつ自動的にこれらの識別子は、実際のデシリアライゼーション上のポインタ(とバックシリアライズのIDへの)に変換します。これが最善のアプローチですか?もしそうなら、誰もこのアプローチを使用/文書化している既存のプロジェクトを知っていますか?そうでない場合は、どのようなアプローチをお勧めしますか?
興味深い。私はクロスプラットフォームサポートが必要なので、おそらくprotobuf-net拡張を使用することはできません。しかし、私はそれをどのように実装したか、つまり抽象レイヤの下にあるものについて興味がありますか? –
@Edwardは、基本的に、idref(キーを介して既存のオブジェクトへのリンク)、またはid(シリアライザによって生成された新しいキー)とサブメッセージを含むメッセージ内に静かにネストされます。しかし、シリアライズエンジンがそれを処理するため、実装はユーザーに対して不透明です –