在python中反序列化Protobuf 3 bytearray

时间:2017-07-06 10:33:06

标签: python-3.x protobuf-3

如何通过bytearray响应读取Protobuf消息为字符串?

我试过查找Protobuf库。 https://developers.google.com/protocol-buffers/docs/reference/python/google.protobuf.message-pysrc#Message.MergeFrom

当我尝试mergeFrom时,mergeFromString返回获取响应。我收到了以下错误。

TypeError:MergeFrom()的参数必须是同一个类的实例:expect GetUpdateResponseMsg得到字节。

我尝试了ParseFromString api并得到了无响应。

我正在尝试将Protobuf反序列化为人类可读的格式。

还有什么我可以尝试的吗?

1 个答案:

答案 0 :(得分:2)

您需要反序列化响应。传入class / protobuf类型以及消息,您应该以格式获得响应。 示例示例如下:

from BusinessLayer.py.GetDealUpdateData_pb2 import GetDealUpdateResponseDM
from importlib import import_module
def deserialize(byte_message, proto_type):
    module_, class_ = proto_type.rsplit('.', 1)
    class_ = getattr(import_module(module_), class_)
    rv = class_()
    rv.ParseFromString(byte_message)
    return rv

print (deserialize(byte_message, 'BusinessLayer.py.GetDealUpdateData_pb2.GetDealUpdateResponseDM'))

byte_message是您将作为回复获得的消息。

如果您有任何问题,请与我们联系。