我们序列化proto文件(proto3)并通过nats发送,如下。
我们订阅并接收来自发送端的数据,我们将这些数据转换为 json,并将消息转换为 json,如下所示。
std::string req_message_str;
google::protobuf::util::MessageToJsonString(deserialized_set_ru_conf, &req_message_str);
std::cout<<req_message_str<<std::endl;
我们看到默认值没有序列化并在传入数据中发送,但我们也有以下观察结果:
如果参数是可选的,即使它有默认值,它也会被序列化并且数据传给我们,但我们使用非可选参数。
我们想要序列化并发送参数,并在消息后查看该数据为 json。你能帮我解决这个问题吗?
我想查看 JSON 中的非可选字段。也许我需要传递像 JsonPrintOptions 这样的参数,但我不确定。
您没有包含 .proto 的相关部分,但这听起来像“存在跟踪”。基本上,最初在 proto3 中,唯一的选项是“隐式零默认值”,即如果它为零:则不发送;如果你使用的话,这就是你得到的:
syntax = "proto3";
message Foo {
int32 id = 1;
}
然而,不久之后,“存在跟踪”作为一项可选功能被添加到 proto3 中,这意味着它会跟踪某个值是否被“显式分配”。这意味着如果一个字段被显式分配一个值包括零:它被序列化。如果你使用的话,这就是你得到的:
syntax = "proto3";
message Foo {
optional int32 id = 1;
}
所以:尝试添加
optional
修饰符。