我有一个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)