Что ProtoInclude приписывает средний (в protobuf-сети)

Вы получите java.lang.VerifyError в любое время, когда существует несоответствие между библиотекой, используемой во время компиляции, и во время выполнения.

Вот еще один поток, в котором перечислены похожие проблемы: Java.lang.verifyerror, как мне исправить или даже выяснить причину?

18
задан Community 23 May 2017 в 12:16
поделиться

1 ответ

Извините, я не хотел пропустить этот - увы, я не все вижу.

Учитывая особенности вопроса, я предполагаю, что вы хотя бы частично знакомы с .proto ; поправьте меня, если я ошибаюсь.

[ProtoInclude] работает так же, как [XmlInclude] для XmlSerializer или [KnownType] для DataContractSerializer DataContractSerializer 1121124] - он позволяет распознавать подклассы типа во время (де) сериализации. Единственная дополнительная вещь - это то, что ему нужен тег (номер) для идентификации каждого подтипа (который должен быть уникальным и не конфликтовать ни с одним из полей родительского типа).

Re protogen: nope; базовая спецификация (от Google) вообще не предусматривает наследования , поэтому у protogen (через .proto) нет механизма, чтобы выразить это. protobuf-net обеспечивает поддержку наследования как расширение , но делает это таким образом, что сообщения остаются совместимыми с другими реализациями. При нажатии, возможно Я мог бы добавить поддержку прототипов с помощью новых свойств расширения в спецификации Google, но я еще не сделал этого.

Итак; посмотреть на пример; выражает отношения наследования между BaseMessage и BeginRequest ; независимо от того, делаете ли вы:

Serialize<BaseMessage>(...)
Serialize<BeginRequest>(...)
  • в любом случае, он начнется с базы ( BaseMessage ) и будет двигаться вверх; что не совсем верно - он записывает данные , начиная с BeginRequest (так что он знает, что у нас есть BeginRequest уже в возможно во время десериализации). Важно то, что включены поля из любого родительского типа контракта, и сериализатор смотрит на фактический переданный объект, а не только на тот тип, который вы называете .
23
ответ дан 30 November 2019 в 08:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: