gpt4 book ai didi

c# - 如何在 protobuf-net 中手动将可选字段添加到类中

转载 作者:太空狗 更新时间:2023-10-30 01:09:36 25 4
gpt4 key购买 nike

在我的 .proto 中,我有一些具有可选字段的消息。 Debian 没有原生原型(prototype),所以我没有可以试验的原型(prototype)(懒得自己编译 :)。

你能告诉我如何在 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 的值。

为了更明确的控制,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)的或私有(private)的(除非您要生成独立的序列化程序集,这需要公共(public))。

如果您的主要类来自 code-gen,那么 partial class是一个理想的扩展点,即

partial class SomeType {
/* extra stuff here */
}

因为您可以将其添加到单独的代码文件中。

关于c# - 如何在 protobuf-net 中手动将可选字段添加到类中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6389477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com