protobuf消息中的自引用字段

时间:2011-05-10 04:22:08

标签: java .net protocol-buffers

这样的消息可以吗?

message A {
  required int64 some_number = 1;
  // .... some more fields
  optional A sub_a = 123;
}

原因是我当前的协议存储A直接设置,而将A包装在另一个消息中会导致存储数据的大量转换。

2.2.0 protoc编译好了。 这可以解决序列化/反序列化问题,并且它是由protobuf-net支持的。

2 个答案:

答案 0 :(得分:8)

这是一个非常精细的定义, 应该在任何实现中工作(包括protobuf-net);你看到有什么问题吗?然而!您可能想要考虑序列化的计算影响 - 特别是要序列化子消息,需要知道子消息的大小 first 。一个深度递归的方法(由此链表所必需)可能会导致一些问题。

有什么理由不能仅仅是repeated消息吗? 到目前为止是我的偏好。

答案 1 :(得分:2)

我不知道protobuf-net,但它应该绝对没问题。我怀疑,如果不能在protobuf-net中工作,Marc会将其视为一个bug并修复它......这肯定是我在C#端口采取的态度:) / p>

(实际上,我不能轻易看出它会是一个什么问题...它不像消息将由结构表示,递归将是一个问题。)

测试应该很容易 - 我建议您尝试一下小信息,看看是否遇到任何问题。您真正需要做的就是创建一条消息并测试您是否可以在不同平台之间正确地序列化和反序列化它。

编辑:显然你需要确保消息本身没有实际的周期......