Google.protobuf,反序列化后,得到的是object,如何统一转换成对应的消息类型
时间: 2023-06-26 10:10:08 浏览: 149
在Google.protobuf中,反序列化后的结果是一个Python对象,可以通过该对象的`DESCRIPTOR`属性获取该消息类型的描述符,然后使用该描述符的`message_class`方法将该对象转换为对应的消息类型。
例如,假设我们有一个`Person`消息类型,可以按以下方式将反序列化的结果转换为该消息类型:
```python
from google.protobuf.descriptor import Descriptor
# 假设反序列化后得到的对象为person_obj
descriptor: Descriptor = person_obj.DESCRIPTOR
message_type = descriptor.message_class
person_message = message_type.FromString(person_obj.SerializeToString())
```
这里通过`person_obj.DESCRIPTOR`获取该对象对应的描述符,然后通过描述符的`message_class`方法获取该消息类型,最后使用该消息类型的`FromString`方法将该对象转换为对应的消息类型。
相关问题
Google.protobuf,反序列化后,得到的是object,如何再统一转换成对应的数据类型
反序列化后得到的是一个 Protobuf 对象,可以通过对象的 getter 方法获取到对应的属性值。如果要将这些值转换为其他数据类型,可以使用对象的转换方法,例如:
- 对于基本数据类型,可以使用对象的 `getIntValue()`、`getLongValue()`、`getFloatValue()`、`getDoubleValue()` 等方法获取对应类型的值。
- 对于字符串,可以使用对象的 `getStringValue()` 方法获取字符串。
- 对于枚举类型,可以使用对象的 `getValue()` 方法获取枚举值。
- 对于嵌套的 Protobuf 对象,可以使用递归的方式将其转换为对应的数据类型。
需要根据具体的需求和 Protobuf 对象的定义来选择合适的转换方法。
阅读全文