2

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

以下是谷歌推荐的内容:

“使用 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;
}

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

4

1 回答 1

2

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

于 2013-07-24T15:05:40.717 回答