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

Используя Protobuf-Net, я вижу, что десериализация класса без дескриптора класса без конструктора без параметров или может быть что-то упущено?

Мне не нужны некоторые классы с конструктором без параметров. Есть ли какие-то атрибуты, которые я мог бы использовать или какую-то другую технику?

Ответ 1

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

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

Это позволяет остальной части вашего api построить конструкцию "незаконных" экземпляров.

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

Ответ 2

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

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

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