protobuf.net и условная сериализация

Мы используем protobuf.net для сериализации классов между мобильными устройствами и серверными службами, но теперь нам нужно настроить то, что отправляется обратно клиенту, в зависимости от «контекста» пользователя.

Обычно мы делаем это, реализуя интерфейс ISerializable и просматривая значение контекста, чтобы затем решить, что сериализовать. Точно так же в конструкторе мы десериализуем предоставленные значения.

Но может показаться, что ISerializable не реализован/не поддерживается (я понимаю, почему) для protobuf.net, поэтому мы обошли это, выбрав подходы «ShouldSerialize*» и «OnSerializing». Однако это означает, что в конечном итоге нам придется хранить StreamingContext в каждом классе, что кажется неправильным. Потенциально мы могли бы вставить его в глобальную систему, но это также кажется неправильным.

Есть ли лучший способ добиться того, чего мы хотим, например. сериализация только с использованием формата protobuf.net, но с чем сериализуется под влиянием внешнего контекста?


person jamie    schedule 17.04.2012    source источник


Ответы (1)


Это хороший вопрос. Поддерживаемые в настоящее время шаблоны (ShouldSerialize* и т. д.) заимствованы «как есть» полностью из BCL, следовательно, без контекста, однако нет никаких причин, по которым он не может поддерживать параметры так же, как обратные вызовы — действительно, для обратных вызовов он поддерживает почти любое использование (с/без контекста и т. д.) - поэтому я не могу придумать вескую причину, чтобы не поддерживать их здесь.

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

person Marc Gravell    schedule 20.04.2012
comment
Для нас это было бы очень полезно. Мы используем protobuf для передачи данных с серверов на мобильные устройства, поэтому каждый байт на счету. Традиционный подход ISerializable дает нам то, что мы хотим с точки зрения функциональности, но дополнительный размер, который мы затем получаем, поскольку мы не используем protobuf, делает его невозможным. - person jamie; 20.04.2012