2

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;
}

大したことないとは思いますが、念のため…

4

1 に答える 1

2

proto 世代は、これらの規則を適用しようとはしません。なぜなら、曖昧さ回避、衝突などの軍拡競争に巻き込まれるからです - CustomerIDReference のような任意の名前で単語の区切りを見つける楽しさは言うまでもありません (OK、それはありそうもない例ですが、あなたはポイントを得る)。それを自分で制御したい場合は、ProtoContractAttribute または ProtoMemberAttribute で Name プロパティを指定します。

于 2013-07-24T15:05:40.717 に答える