使用协议缓冲器编码循环数据结构(例如有向图)

时间:2011-12-09 19:44:45

标签: serialization protocol-buffers

我有一个图形数据结构,我想用protocol buffers进行编码。图顶点之间存在循环连接。是否有标准/通用方法在protobuf中编码这样的结构?想到的一种方法是向每个顶点添加“id”字段,并使用这些id而不是指针。 E.g:

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)。这是最好的方法吗?如果是这样,那么有没有人知道使用/记录这种方法的现有项目?如果没有,那么你会推荐什么方法?

1 个答案:

答案 0 :(得分:2)

如果您需要跨平台支持,然后在问题中使用DTO,那么在您自己的代码中将该映射映射到单独的基于图形的模型中可能是您最好的方法。

作为旁注,在protobuf-net(c#/ .net)中,我添加了对此的支持,它默默地添加了一层抽象。基本上,以下工作:

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