3

我想用我自己的版本号标记每个 protobuf 序列化数据。因此,如果需要,我可以检查用于序列化数据的版本。虽然 protobuf 是围绕想法设计的,所以你不需要检查版本。

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

只是想确认这也是 protobuf 中的首选方式。

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

也应该像上面一样在protobuf-net中完成?在构造函数中分配版本,如果类变得不理想,它将被覆盖。对于要序列化的新对象,它将使用版本 1

4

1 回答 1

1

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

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

于 2010-08-11T08:15:42.247 回答