对任何类型的消息进行编码和解码协议缓冲区



我有一个proto文件,看起来像这样。

syntax = "proto3";
import "google/protobuf/any.proto";
message User {
google.protobuf.Any user = 1;
}

然后我尝试对消息进行编码和解码,我丢失了google.protobuf.Any类型的信息。

const protobuf = require('protobufjs');
const root = protobuf.loadSync("./user.proto")
const User = root.lookupType("User");
var payload = { user: [1,2,3] };
var message = User.create(payload);
console.log(message) // User { user: [ 1, 2, 3 ] }
var buffer = User.encode(message).finish();
var message = User.decode(buffer);
console.log(message) //User { user: Any {} }

有人知道为什么吗?

您应该使用另一条消息将其打包到google.protobuf.Any字段中。
例如:Foo

syntax = "proto3";
import "google/protobuf/any.proto";
message User {
google.protobuf.Any user = 1;
}
message Foo {
string bar = 1;
}
const protobuf = require('protobufjs');
const root = protobuf.loadSync("./user.proto")
var User = root.lookupType(".User");
var user1 = User.fromObject({
user: {
"@type": "type.googleapis.com/Foo",
bar: "foobar"
}
});
console.log(user1)
var buffer = User.encode(user1).finish();
var user2 = User.decode(buffer);
var obj = User.toObject(user2, { json: true });
console.log(obj)

最新更新