如何在protobuf-net中手动添加可选字段到
问题描述:
在我的.proto中我有一些消息有可选字段。 Debian没有原生的原生代,所以我没有一个可以尝试的人(懒得自己编译它:)。如何在protobuf-net中手动添加可选字段到
你能告诉我如何在C#中的类中实现可选字段吗?我想有一个函数或任何字段设置的字段(在C + +我有像hasfoo())。在互联网上找到的例子中,没有像这样的东西。
答
它支持许多模式,以帮助从其他序列化器转换。请注意,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的值不会被序列化。
为了更明确的控制,(从XmlSerializer
)的ShouldSerialize*
模式和*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 */
这些都可以公共或私人(除非您正在生成独立的序列化程序集,这需要公开)。
如果你的主类是从代码生成的到来,那么partial class
是一个理想的扩展点,即
partial class SomeType {
/* extra stuff here */
}
,因为你可以添加在一个单独的代码文件。