繁体   English   中英

protobuf-net转换成.proto会产生枚举冲突?

[英]protobuf-net into .proto generates enum conflicts?

在C#中,我们从protobuf-net获得.proto中的名称空间,但没有任何名称空间。 因此,问题是如何使protobuf-net生成(并在内部使用)具有名称pacs / packages的.proto文件。

例如,当我们解析所有项目以制作.proto文件以将C ++应用程序连接到C#应用程序时,

enum AnimationCode {
   None = 0;
   Idle = 1;
   //...
}

enum SessionCode {
   None = 0;
   //...
}

因此,当我们将该统一项目.proto文件提供给protogen编译器时,我们得到了

枚举类型“ SessionStateCode”没有名为“ None”的值。

请注意,枚举值使用C ++范围规则,这意味着枚举值是其类型的同级,而不是其子级。

而且没有C ++代码。

这样做的目的是使编码的C#消息至少可以从C ++读取

尽管我很想知道您是否有任何建议,但是protobuf-net内部目前没有任何代码可以执行自动名称冲突修复。 另一种选择是:

    enum AnimationCode {
        [ProtoEnum(Name="AnimationCode_None")]
        None = 0,
        Idle = 1
    }

在这里,.proto在生成scema时将使用AnimationCode_None 实际上,它将是:

enum AnimationCode {
   AnimationCode_None = 0;
   Idle = 1;
}

我已经检查了MetaType / ValueMember API,看起来目前很难在运行时设置.Name ,但是如果您愿意,可以很容易地在新版本中MetaType修复 (例如使用类似的enum / MetaType fix )首选在运行时设置它们,而不用属性装饰。

你有尝试过吗?

package MyNamespace{
    enum AnimationCode {
       None = 0;
       Idle = 1;
       //...
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM