2009-08-26 1 views
10

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

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

ответ

13

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

Однако этот конструктор не обязательно должен быть общедоступным (it will use reflection if need be to invoke it), поэтому вы можете определить требуемый частный конструктор только для использования protobuf-net (добавив комментарий о том, почему) и справиться с определенными проблемами, связанными с сериализацией.

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

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

+0

, когда называется конструктором без параметров? Перед обновлением других полей? – mcmillab

4

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

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

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

+0

Я предполагаю, что это то, что вы сделали ('FormatterServices') с опцией SkipConstructor, доступной в наши дни? – DeCaf

+0

@DeCaf да, это то, что он делает –

Смежные вопросы