Google.protobuf,反序列化后,得到的是object,如何统一转换成对应的类型
时间: 2023-06-26 15:10:07 浏览: 183
protobuf文件的反序列化
在 Google.protobuf 中,可以通过使用 `DynamicMessage` 类来实现反序列化后的对象转换成对应的类型。
首先,需要定义一个 protobuf 的消息类型描述符(MessageDescriptor),可以通过以下方式创建:
```python
import google.protobuf.descriptor_pool as descriptor_pool
message_descriptor = descriptor_pool.Default().FindMessageTypeByName(proto_type_name)
```
其中,`proto_type_name` 为 protobuf 消息类型的名称。
然后,可以通过以下代码将反序列化得到的 `protobuf` 对象转换为对应类型的对象:
```python
from google.protobuf.json_format import MessageToDict
from google.protobuf.message import Message
def protobuf_to_object(protobuf: Message, message_descriptor: MessageDescriptor) -> object:
message_class = message_descriptor._concrete_class # 获取对应类型的类
message_dict = MessageToDict(protobuf, including_default_value_fields=True) # 将 protobuf 转换为字典
# 创建对应类型的对象
obj = message_class()
obj.ParseFromDict(message_dict)
return obj
```
其中,`MessageToDict` 函数用于将 protobuf 对象转换为字典,`_concrete_class` 属性用于获取对应类型的类,`ParseFromDict` 方法用于将字典转换为对应类型的对象。
最终,可以通过调用 `protobuf_to_object` 函数将反序列化得到的 `protobuf` 对象转换为对应类型的对象。
阅读全文