'oneof'protobuf字段的预期JSON序列化是什么?

pht*_*ier 13 json protocol-buffers

假设我有一个像这样结构的.proto:

syntax = "proto3";

message Foo {
  ...
}
message Bar {
  ...
}

message Msg {
  string baz = 1;
  oneof some_union {
     Foo foo = 2;
     Bar bar = 3;
  }
}
Run Code Online (Sandbox Code Playgroud)

序列化此类消息的预期方式是什么?规范的JSON Mapping部分不是很清楚.

我可以看到至少两种表示方式,哪种方式正确?

第一种方式:在"顶层"有一个元素,忽略其他元素:

{
  "baz" : 0,
  "foo" : { ... }
}
Run Code Online (Sandbox Code Playgroud)

第二种方式:拥有一个带有联合名称的"unmbrella"属性,并给它一个字段.

{
  "baz" : 0,
  "some_union": {
    "foo" : { .... }
  }
}
Run Code Online (Sandbox Code Playgroud)

我应该期待什么?

sma*_*wjw 3

我编写了一些测试代码,它表明第一个是正确的。

  • 是的,我们采用了相同的方法,但在不同语言的不同实现中得到了不同的结果:D (2认同)