如何在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 */ 
} 

,因为你可以添加在一个单独的代码文件。