1

我有一个看起来像这样的原始文件。

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 {} }

有谁知道这是为什么?

4

1 回答 1

1

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

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)
于 2020-08-07T08:37:45.617 回答