c# - 用于重命名冲突默认值的 ProtoEnum 属性用法

标签 c# c++ .net protocol-buffers protobuf-net

我正在尝试从大型 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 中的一个错误;我已经修复了 in this commit ,它在 nuget 中尚不可用 - 但请注意,这仅适用于 v3(我还没有将修复程序反向移植到 v2 分支)。

关于c# - 用于重命名冲突默认值的 ProtoEnum 属性用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64336050/

相关文章:

.net - 在 .Net Core 3.1 中使用 MongoDB API 出现 Azure Cosmos DB 中的重复 key 问题

C# 和 HTML 敏捷包 - 返回空值

C# WinForms 在 TreeView 没有焦点时突出显示树节点

c++ - 如何绘制存储在 SSBO 中的顶点?

c++ - 将线程标识为 "Remote thread"

c# - 使用 SQLite 进行可靠的插入

c# - Dapper空间地理类型

c# - Entity Framework Core 返回一些选择

c++ - Visual Studio中静态库项目之间 Unresolved external 问题

c# - 基于选择蒙版的切片数组