可以使用 protogen.exe 正确生成可选字段
Can generate optional fields correctly with protogen.exe
我使用此命令行从此处https://protogen.marcgravell.com/ and I try to generate a C# file with *Specified
accessors for optional members, as stated here 下载了 CLI protogen.exe:
protogen --csharp_out="." MyProtoFile.proto +p:detectMissing
所有使用值类型的可选成员都没有可空类型或 Specified
访问器。
我也经常收到这条警告信息:
google/protobuf/descriptor.proto(41,1,41,8): warning: no syntax specified; it is strongly recommended to specify 'syntax="proto2";' or 'syntax="proto3";'
我不明白,因为我的原型文件的第一行是:
syntax="proto2";
警告来自 descriptor.proto,而不是您的原型。我会考虑是否应该对导入的文件进行抑制。
"detect missing" 问题是因为之前的答案已经过时并且与 r668 版本的 protogen 有关。 protogen 工具在去年被完全重写为完全托管代码,并且大概该功能不再适用或以不同方式实现。我不是在 PC 上检查,但是:这是根本原因。如果您 运行 该工具没有任何选项,它应该会向您显示支持的用法。
编辑:ShouldSerialize()
方法在适当的时候提供,应该可以用于此目的。
这是一个遗留问题。我必须在 .NET 中解析 google Protobuf 2 消息。因此,Marc,请澄清您当前的 protobuf-net 版本(以及未来版本)是否支持 Protobuf 2 has_() 方法。如果是这样,protogen 可以从 proto 文件生成 has_() 方法吗?可以的,protogen怎么办?
我使用此命令行从此处https://protogen.marcgravell.com/ and I try to generate a C# file with *Specified
accessors for optional members, as stated here 下载了 CLI protogen.exe:
protogen --csharp_out="." MyProtoFile.proto +p:detectMissing
所有使用值类型的可选成员都没有可空类型或 Specified
访问器。
我也经常收到这条警告信息:
google/protobuf/descriptor.proto(41,1,41,8): warning: no syntax specified; it is strongly recommended to specify 'syntax="proto2";' or 'syntax="proto3";'
我不明白,因为我的原型文件的第一行是:
syntax="proto2";
警告来自 descriptor.proto,而不是您的原型。我会考虑是否应该对导入的文件进行抑制。
"detect missing" 问题是因为之前的答案已经过时并且与 r668 版本的 protogen 有关。 protogen 工具在去年被完全重写为完全托管代码,并且大概该功能不再适用或以不同方式实现。我不是在 PC 上检查,但是:这是根本原因。如果您 运行 该工具没有任何选项,它应该会向您显示支持的用法。
编辑:ShouldSerialize()
方法在适当的时候提供,应该可以用于此目的。
这是一个遗留问题。我必须在 .NET 中解析 google Protobuf 2 消息。因此,Marc,请澄清您当前的 protobuf-net 版本(以及未来版本)是否支持 Protobuf 2 has_() 方法。如果是这样,protogen 可以从 proto 文件生成 has_() 方法吗?可以的,protogen怎么办?