Protobuf,如何在二进制中添加自定义版本细节

时间:2010-08-10 21:50:02

标签: protocol-buffers protobuf-net

我想用自己的版本号标记每个protobuf序列化数据。所以如果需要,我可以检查用于序列化数据的版本。尽管protobuf是围绕创意设计的,因此您无需检查版本。

为此,我可以使用相同的方式在.net序列化中添加版本字段。

只是想确认这是在protobuf中做的首选方法。

class protodata1
{
  public protodata1()
 {
  version = 1;
 }
  [Protomember(1)]
  int version { get; set;}
  [Protomember(2)]
  int somedata { get; set;}
}

还应该像protobuf网上面那样做? 在构造函数中指定版本,如果类被去除化,将获得覆盖。对于要序列化的新对象,它将使用版本1

1 个答案:

答案 0 :(得分:1)

好吧,如果你的“版本”的含义只是一个数据字段,那么肯定;只需将其添加为序列化成员即可。请注意,这在序列化期间没有任何特殊含义(例如,通过替代合同运行) - 尽管如果您需要支持可能是“v2”中的选项em>从根本上不同的消息结构(无论如何都是一个坏主意)。

我可能添加的唯一警告是已包含此数字的任何现有数据将声称为“版本1”。在“v2”中,另一种选择是使用跳过构造函数的WCF方法(如果需要)。这意味着这些情况默认为​​“版本0” - 可能不那么令人困惑(或者可能更令人困惑;我会让你决定)。