protobuf-net 生成的 .proto 文件中的字段命名约定不正确?

Posted

技术标签:

【中文标题】protobuf-net 生成的 .proto 文件中的字段命名约定不正确?【英文标题】:Incorrect naming convention for fields in .proto files generated by protobuf-net? 【发布时间】:2013-07-24 14:31:46 【问题描述】:

我刚刚开始使用 Google Protocol Buffers 和 Marc Gravell 令人敬畏的 protobuf-net 程序,我不明白的一件事是生成的 .proto 文件中字段声明的命名约定。

以下是 Google 的建议:

“使用 underscore_separated_names 作为字段名称——例如,song_name。” https://developers.google.com/protocol-buffers/docs/style

“请注意,方法名称始终使用驼峰式命名,即使 .proto 文件中的字段名称使用带下划线的小写(应该如此)。” https://developers.google.com/protocol-buffers/docs/reference/java-generated

“请注意这些访问器方法如何使用驼峰式命名,即使 .proto 文件使用带下划线的小写字母。” https://developers.google.com/protocol-buffers/docs/javatutorial

但是当我在 protobuf-net 中使用 Serializer.GetProto() 方法时:

  [ProtoContract]
  public partial class AuthEntry
  
     private string _windowsAccount = "";
     private string _machineNames = "*";

     [ProtoMember(1)]
     public string WindowsAccount
     
        get  return _windowsAccount; 
        set  _windowsAccount = value; 
     

     [ProtoMember(2)]
     public string MachineNames
     
        get  return _machineNames; 
        set  _machineNames = value; 
     
  

我明白了:

message AuthEntry 
   optional string WindowsAccount = 1;
   optional string MachineNames = 2;

而不是像我预期的那样:

message AuthEntry 
   optional string windows_account = 1;
   optional string machine_names = 2;

我猜这没什么大不了的,但以防万一......

【问题讨论】:

我们使用 protoc 将 Protocol Buffers 编译成 javascript,这很烦人,因为 PascalCase 属性编译成“getLowercase”getter 和 setter,例如。获取 Windows 帐户,获取机器名称。它很难阅读,我们不能使用代码拼写检查。 【参考方案1】:

原型生成不会尝试应用这些约定,因为它会进入消歧、冲突等军备竞赛 - 更不用说在诸如 CustomerIDReference 之类的任意名称中查找断词的乐趣(好吧,这不太可能例如,但你明白了)。如果您想自己控制 - 在 ProtoContractAttribute 或 ProtoMemberAttribute 上指定 Name 属性。

【讨论】:

我认为,一个工具应该适应协议的规则和约定,反之亦然。 protobuf-net 工具应该尝试或生成一个干净的 protobuf。使用 protobuf-net 解决冲突是开发人员的责任。

以上是关于protobuf-net 生成的 .proto 文件中的字段命名约定不正确?的主要内容,如果未能解决你的问题,请参考以下文章

使用 protobuf-net.Grpc 生成通用服务的 .proto 文件

protobuf-net 生成的 .proto 文件中的字段命名约定不正确?

protobuf-net 中日期时间的 .proto 消息是啥

如何使用 protobuf-net 处理 .proto 文件

.proto 文件中带有 oneof 的 Protobuf-net

protobuf-net - 反引号、字典和 .proto 文件