Действительно ли возможно использовать Protobuf-сеть с классом без конструктора без параметров?

В целом у нас есть инициализация по умолчанию в первом случае и инициализация значения во втором случае.

, Например: в случае, если с интервалом (тип POD):

  • int* test = new int - у нас есть любая инициализация и значение *, тест может быть любым.

  • int* test = new int() - *тест будет иметь 0 значений.

следующее поведение зависело от Вашей проверки печатания. У нас есть почтительные случаи: Тест имеет defult конструктора, Тест генерировали конструктора по умолчанию, Тест содержат участника POD, не участника POD...

10
задан Stécy 26 August 2009 в 15:45
поделиться

2 ответа

protobuf-net в настоящее время зависит от наличия конструктора без параметров для работы.

Однако этот конструктор не обязательно должен быть общедоступным ( он будет использовать отражение, если потребуется его вызвать ), поэтому вы можете определите требуемый частный конструктор только для использования protobuf-net (добавив комментарий о том, почему) и решите там конкретные проблемы, связанные с сериализацией.

Это не дает остальной части вашего api создавать «незаконные» экземпляры.

Марк указывает, что если вы говорите о внешнем объекте сообщения, вы также можете создать объект самостоятельно и вызвать Serializer.Merge. Но если ему нужно создать объект (потому что он в настоящее время имеет пустой экземпляр или для новых элементов в списке / массиве), тогда он ищет конструктор по умолчанию.

13
ответ дан 3 December 2019 в 21:22
поделиться

ShuggyCoUk прав насчет использования конструктора без параметров.

Но для полноты картины - если вы говорите о самом внешнем объекте сообщения , вы также можете создать возразите себе и вызовите Serializer.Merge . Но если ему нужно создать объект (поскольку он в настоящее время имеет экземпляр null или для новых элементов в списке / массиве), он ищет конструктор по умолчанию.

Я полагаю , что я мог бы также предоставить некоторую разметку в атрибуте, чтобы сказать «просто создайте необработанный объект через FormatterServices », но это кажется ненужным (по сравнению с частным конструктором без параметров) и может не работать на всех платформы (Silverlight, CF и т. д. - вероятные проблемы).

4
ответ дан 3 December 2019 в 21:22
поделиться
Другие вопросы по тегам:

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