2011-12-09 13 views
5

我有一個圖表數據結構,我想用protocol buffers進行編碼。圖頂點之間存在循環連接。在protobuf中是否有標準/常用的方法來編碼這些結構?想到的一種方法是爲每個頂點添加一個「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生成的類,並自動這些標識符轉換爲真正的指點反序列化(和回IDS的序列化)類。這是最好的方法嗎?如果是這樣,那麼是否有人知道使用/記錄這種方法的現有項目?如果沒有,那麼你會推薦什麼方法?

回答

2

如果您需要跨平臺支持,那麼在問題中使用DTO,然後在您自己的代碼中將其映射到/從單獨的基於圖形的模型中映射到可能是您的最佳方法。作爲一個方面說明,在protobuf-net(c#/ .net)中,我增加了對此的支持,它靜靜地添加了一層抽象。基本上,以下工作:

[ProtoContract] 
class Vertex { 
    ... 
    [ProtoMember(3, AsReference = true)] 
    public List<Vertex> OutgoingEdges {get;set;} 
} 
+0

有趣。我確實需要跨平臺支持,所以我可能無法使用protobuf-net擴展。但我很好奇你是如何實現它的 - 即你的抽象層是什麼? –

+1

@Edward基本上,每個都靜靜地嵌套在帶有idref(通過鍵指向預先存在的對象的鏈接)或ID(由序列化程序生成的新鍵)和子消息的消息中。但是,由於序列化引擎處理它,所以對用戶來說這個實現是不透明的 –