4

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

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

当我尝试 mergeFrom 时, mergeFromString 来取回响应。我得到以下错误。

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

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

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

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

4

1 回答 1

4

您需要反序列化响应。将 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 是您将收到的消息作为响应。

如果您有任何问题,请告诉我。

于 2017-07-06T10:41:21.993 回答