Здесь поддерживается ряд шаблонов, чтобы помочь переходу от других сериализаторов.И обратите внимание, что в protobuf-net protogen
есть опции для автоматического включения таких членов для вас.
Во-первых, все, что null
опущено;это включает в себя как null
ссылки, так и Nullable<T>
для структур.Итак:
[ProtoMember(1)]
public int? A {get;set;}
будет вести себя.
Другой вариант - значения по умолчанию;используя соглашения .NET:
[ProtoMember(2), DefaultValue(17)]
public int B {get;set;}
никакие значения 17 не будут сериализованы.
Для более явного управления, шаблон ShouldSerialize*
(из XmlSerializer
) и шаблон *Specified
(от DataContractSerializer
), поэтому вы можете сделать:
[ProtoMember(3)]
public string C {get;set;}
public bool ShouldSerializeC() { /* return true to serialize */ }
и
[ProtoMember(4)]
public string D {get;set;}
public bool DSpecified {get;set;} /* return true to serialize */
Они могут быть общедоступными или частными (если вы не генерируете отдельную сборку сериализации, котораятребуется public).
Если ваши основные классы происходят из code-gen, то partial class
является идеальной точкой расширения, то есть
partial class SomeType {
/* extra stuff here */
}
, поскольку вы можете добавить это в отдельномфайл кода.