Protobuf, как добавить пользовательские детали версии в двоичном - PullRequest
3 голосов
/ 11 августа 2010

Я хочу пометить все сериализованные данные protobuf своим собственным номером версии. так что я могу проверить, какая версия использовалась для сериализации данных, если это необходимо. Хотя protobuf разработан на основе идеи, поэтому вам не нужно проверять версию.

Для этого я могу использовать то же самое, что мы делали в .net serialization, добавив в него поле версии.

Просто хочу подтвердить, что это также предпочтительный способ работы в protobuf. * ​​1005 *

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

Также должно быть сделано, как указано выше, в protobuf-net? назначить версию в конструкторе, которая будет переопределена, если класс будет десирализован. для сериализации новых объектов будет использоваться версия 1

1 Ответ

1 голос
/ 11 августа 2010

Хорошо, если ваше значение слова «версия» просто как поле данных, тогда обязательно;просто добавьте его как сериализованный член.Обратите внимание, что это не будет иметь никакого особого значения во время сериализации (например, запуск его через альтернативный контракт) - хотя в качестве альтернативы может быть вариантами здесь в "v2", если вам нужно поддерживать радикально различные структуры сообщений (в любом случае, это плохая идея).

Единственное предостережение, которое я могу добавить, заключается в том, что любые существующие данные, которые не уже включают это число, будут претендовать на"версия 1".В "v2" другой вариант - использовать подход WCF, пропуская конструктор (если вам нужно).Это будет означать, что эти случаи по умолчанию вместо «версия 0» - возможно, менее запутанным (или, возможно, более запутанным; я позволю вам решить).

...