Protobuf-Net Использование атрибута ProtoMember "IsRequired" - PullRequest
7 голосов
/ 26 августа 2011

Что используется для атрибута Protobuf-Net ProtoMember "IsRequired"?

Как это повлияет, если я добавлю новое свойство (член) к уже сериализованному классу в файле. Если я использую «IsRequired = true», он просто примет его без загрузки значения (поскольку его там нет) или я должен установить значение в false? И если я установлю его на ложь, будет ли сериализовано правильно значение?

1 Ответ

6 голосов
/ 12 февраля 2013

Согласно Проблема 262: ProtoMembers с IsRequired = true на самом деле не требуются :

В настоящее время IsRequired в основном влияет на сериализацию , заставляя игнорировать некоторые правила по умолчанию.

Когда IsRequired имеет значение false (по умолчанию), значения по умолчанию не сериализуются, например, целочисленное значение 0 не будет сериализовано, значение 1will.

Когда IsRequired имеет значение true, все значения, включая значения по умолчанию, сериализуются.

Десериализация с использованием protobuf-net в настоящее время, похоже, не зависит от значения IsRequiredприписывать.Однако, если вы используете для десериализации другую реализацию Google Protocol Buffers , вы можете увидеть другое поведение.

Если добавить новое свойство в существующий класс и десериализовать сериализованный файл, написанный ранеесвойство было добавлено, новое свойство просто не будет установлено.

...