Protocol Buffer Java,序列化一个有字段的枚举
Protocol Buffer Java, serialize an enum that has fields
假设我在 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
枚举的方法。
借助我在评论中链接到的答案,我能够编写以下原型文件:
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];
}
}
然后可以在客户端使用 getValueDescriptor.getOptions()
访问 dogBreed
的值
然而我意识到我最终并不需要它。我试图准确地复制我的数据模型 class.That,因为我来自 Jackson 的 JSON 序列化世界,在那里你可以准确地发送和接收你的数据模型 classes.
但是由于 protobuf 使用了中间表示 class 我不妨这样写:
message DogMessage {
string dogName = 0;
string dogBreed = 1;
}
而且我将能够根据另一侧的那些字符串值重建我的数据模型枚举。
感谢您调查此问题
编辑:进一步的认识:Dog
枚举由什么组成并不重要。只要我转移其中一个值(MAX、SCOOTER),我就能够根据这个单一值完全重建枚举。
假设我在 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
枚举的方法。
借助我在评论中链接到的答案,我能够编写以下原型文件:
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];
}
}
然后可以在客户端使用 getValueDescriptor.getOptions()
dogBreed
的值
然而我意识到我最终并不需要它。我试图准确地复制我的数据模型 class.That,因为我来自 Jackson 的 JSON 序列化世界,在那里你可以准确地发送和接收你的数据模型 classes.
但是由于 protobuf 使用了中间表示 class 我不妨这样写:
message DogMessage {
string dogName = 0;
string dogBreed = 1;
}
而且我将能够根据另一侧的那些字符串值重建我的数据模型枚举。
感谢您调查此问题
编辑:进一步的认识:Dog
枚举由什么组成并不重要。只要我转移其中一个值(MAX、SCOOTER),我就能够根据这个单一值完全重建枚举。