在 proto3 中,可以使用 Any 类型来处理动态类型。Any 类型可以容纳任何 protobuf 消息类型,并且可以动态解析和构建。

下面是一个示例,展示了如何在 C# 中使用 Any 类型:

using Google.Protobuf;
using Google.Protobuf.WellKnownTypes;

// Define a protobuf message.
message Person {
  string name = 1;
  int32 age = 2;
}

// Create an instance of the message.
var person = new Person {
  Name = "John",
  Age = 30
};

// Pack the message into an Any.
Any any = Any.Pack(person);

// Serialize the Any to a byte array.
byte[] bytes = any.ToByteArray();

// Deserialize the byte array to an Any.
Any any2 = Any.Parser.ParseFrom(bytes);

// Unpack the Any to the original message type.
if (any2.Is(Person.Descriptor)) {
  Person person2 = any2.Unpack<Person>();
  Console.WriteLine(person2.Name);  // Output: John
  Console.WriteLine(person2.Age);   // Output: 30
}

在上面的示例中,我们首先定义了一个名为 Person 的 protobuf 消息类型。然后,我们创建了一个 Person 实例,并将其打包到一个 Any 中。接着,我们将 Any 序列化为一个字节数组,并将其反序列化为另一个 Any。最后,我们将第二个 Any 解包成原始的 Person 类型,并输出了其属性值。

需要注意的是,使用 Any 类型需要在 proto 文件中添加以下语句:

import "google/protobuf/any.proto";

这样才能使用 Any 类型来处理动态类型


原文地址: http://www.cveoy.top/t/topic/dx41 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录