Protocol Buffer Java,序列化包含字段

时间:2015-08-23 16:29:53

标签: java enums protocol-buffers

假设我在Java中定义了以下枚举:

public enum DogBreed {
  GERMAN_SHEPHERD,
  FRENCH_BULLDOG,
  ...
}

public enum Dog {
  MAX(DogBreed.GERMAN_SHEPHERD),
  SCOOTER(DogBreed.FRENCH_BULLDOG),
  ...

  private final DogBreed breed;
}

在原型文件中描述DogBreed很简单,但我无法找到描述Dog枚举的方法。

1 个答案:

答案 0 :(得分:0)

借助我在评论中链接的答案,我能够编写以下原型文件:

import "google/protobuf/descriptor.proto";

extend google.protobuf.EnumValueOptions {
  DogMessage.DogBreed dogBreed = 51234;
}

message DogMessage {
  enum DogBreed {
    GERMAN_SHEPHERD = 0;
    FRENCH_BULLDOG  = 1;
  }

  enum  Dog {
    MAX     = 0 [(dogBreed) = GERMAN_SHEPHERD];
    SCOOTER = 1 [(dogBreed) = FRENCH_BULLDOG];
  }
}

然后可以使用dogBreed

在客户端访问getValueDescriptor.getOptions()的值

然而我意识到我实际上最终并不需要它。我试图完全复制我的数据模型类。那是因为我来自杰克逊的JSON序列化世界,您可以在其中发送和接收您的数据模型类。 但是由于protobuf使用了一个中间表示类,我不妨写下以下内容:

message DogMessage {
  string dogName  = 0;
  string dogBreed = 1;
}

我将能够根据另一方的字符串值重建我的数据模型枚举。

感谢您查看此内容

编辑:进一步实现:Dog枚举是由什么构成的并不重要。只要我传输其中一个值(MAX,SCOOTER),我就能够根据这个单值重新完成枚举。