c# - ProtoEnum 属性用于重命名冲突的默认值
问题描述
我正在尝试从大型 c# .net 代码库生成 c++ protobuf 类。枚举“NotSet”在许多枚举声明中用作默认值,因此我使用 ProtoEnum 属性为发生冲突的导出提供不同的名称。但是,我发现我导出的 .proto 文件的类具有这些枚举之一作为成员的类,其默认值仍然使用原始名称,然后 protoc 无法生成 C++ 文件而无需更正。
使用以下示例,
[DataContract]
[ProtoContract]
public enum MyEnum
{
[EnumMember]
[ProtoEnum(Name = "MyEnum_NotSet", Value=0)]
NotSet,
SomeValue,
AndSoOn
}
在我需要导出的类中,枚举显示为我希望导出的成员。
[ProtoContract]
public class MyClass
{
[DataMember]
[ProtoMember(1)]
private MyEnum m_myEnum;
}
然而,在导出的 .proto 文件中,这个类最终以原始枚举名称作为其默认值......
syntax = "proto2";
enum MyEnum {
MyEnum_NotSet = 0;
SomeValue= 1;
AndSoOn= 2;
}
message MyClass{
optional MyEnum m_myEnum= 1 [default = NotSet];
}
使用 protoc 从中生成 c++ 文件失败 - 枚举类型“MyEnum”没有名为“NotSet”的值。
我在这里缺少一些步骤吗?
解决方案
这是 protobuf-net 中的一个错误;我已经修复了这个提交,它在 nuget 中尚不可用 - 但请注意,这仅适用于 v3(我没有将修复反向移植到 v2 分支)。
推荐阅读
- php - Laravel 启动问题 - 一般错误:1364 字段 'id' 没有默认值
- oracle-data-integrator - 如何在运行时设置知识模块选项?
- java - 并行度=1的串行和并行执行之间的区别
- java - 尝试在 Web 应用程序上查看数据库时出现空指针异常
- 3d - Wavefront Obj 材料,.rfl 文件
- haxe - 如何使用 Haxe SSL 套接字?
- python - 尝试使用 sqlite3 导入 csv 时出现语法错误
- java - pwdField.setEchoChar(char(0)); 不能在 Netbeans 上编译
- javascript - 如何使用 Redux 和 ReactJS 向功能组件添加操作
- mysql - 尝试创建一个将任何表记录整理成字符串的 MySQL 过程