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

25
假设我有一个.proto文件,其结构如下:

假设我有一个.proto文件,其中的结构类似于:

syntax = "proto3";

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

message Msg {
  string baz = 1;
  oneof some_union {
     Foo foo = 2;
     Bar bar = 3;
  }
}

如何按预期方式序列化这种消息?规范中的JSON 映射部分不是很清楚。

我至少可以看到两种表示方法,哪一种是正确的?

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

{
  "baz" : 0,
  "foo" : { ... }
}

第二种方法:使用一个名为 "unmbrella" 的属性,其中包含联合的名称,并给它一个单一的字段。

{
  "baz" : 0,
  "some_union": {
    "foo" : { .... }
  }
}

我应该期待什么?


应该很容易使用 Google 自己的实现之一进行测试,但我猜测第一个实现是正确的,因为它与二进制表示的编码方式相匹配。 - jpa
2个回答

3

我写了一些测试代码,它显示第一个是正确的。


2
没错,我们采用了相同的方法,在不同的语言中使用不同的实现方式得到了不同的结果 :D - phtrivier

-1

这对我有效

{
  "baz" : 0,
  "some_union" : {
     "oneofKind: "foo",
     "foo" : {...}

   }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接