Самоссылающиеся поля в сообщениях protobuf - PullRequest
8 голосов
/ 10 мая 2011

Можно ли иметь подобное сообщение?

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

Причина в том, что мой текущий протокол хранит набор A напрямую, а упаковка A в другое сообщение приведет к массовому преобразованию хранимых данных.

2.2.0 protoc компилирует это нормально. Может ли это создать какие-либо проблемы с сериализацией / десериализацией, и поддерживается ли это protobuf-net?

Ответы [ 2 ]

8 голосов
/ 10 мая 2011

Это идеальное определение, и должно работать в любой реализации (включая protobuf-net); Вы видите какие-либо проблемы? ТЕМ НЕ МЕНИЕ! Возможно, вы захотите рассмотреть влияние сериализации на вычислительные возможности - в частности, для сериализации вложенного сообщения необходимо знать размер вложенных сообщений first . Глубоко рекурсивный метод (как того требует этот связанный список) может вызвать некоторые проблемы.

Есть ли причина, по которой это не может быть просто сообщение repeated? это было бы далеко моим предпочтением.

2 голосов
/ 10 мая 2011

Я не знаю про protobuf-net, но он должен быть абсолютно нормальным. Я подозреваю, что если он не работает в protobuf-net, Марк посчитал бы это ошибкой и исправил бы ее ... это, безусловно, такое отношение я бы использовал в своем порту C #:)

(Реально, я не могу легко понять, как это было бы проблемой ... не похоже, что сообщения будут представлены структурами, где рекурсия была бы проблемой.)

Это должно быть довольно легко проверить - я предлагаю вам попробовать с небольшим сообщением, и посмотреть, если у вас возникнут какие-либо проблемы. Все, что вам действительно нужно, это создать сообщение и проверить, можете ли вы его сериализовать и десериализовать правильно, возможно, между различными платформами.

РЕДАКТИРОВАТЬ: Очевидно, вам нужно убедиться, что нет фактических циклов с точки зрения самих сообщений ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...