Можно ли использовать Protobuf-Net с классом без конструктора без параметров? - PullRequest
10 голосов
/ 26 августа 2009

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

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

Ответы [ 2 ]

13 голосов
/ 26 августа 2009

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

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

Это удерживает остальную часть вашего API от возможности создания «нелегальных» экземпляров.

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

4 голосов
/ 27 августа 2009

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

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

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

...