[英]how to add optional field to a class manually in protobuf-net
在我的.proto中,我有一些包含可选字段的消息。 Debian没有本机原型,所以我没有一个可以试验(懒得自己编译:)。
你能告诉我如何在C#中的类中实现可选字段吗? 我想有一个函数或任何设置字段的idicate(在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将被序列化。
为了更明确的控制,可以观察到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 */
这些可以是公共的或私有的(除非您生成一个需要公共的独立序列化程序集)。
如果你的主要类来自代码,那么partial class
是一个理想的扩展点,即
partial class SomeType {
/* extra stuff here */
}
因为您可以在单独的代码文件中添加它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.