Десериализовать Protobuf 3 bytearray в Python

Как прочитать сообщение Protobuf через ответ bytearray в виде строки?

Я попытался найти библиотеку Protobuf. https://developers.google.com/protocol-buffers/docs/reference/python/google.protobuf.message-pysrc

Когда я попробовал mergeFrom, mergeFromString, чтобы получить ответ обратно. Я получаю ниже ошибки.

TypeError: Параметр для MergeFrom() должен быть экземпляром того же класса: ожидается, что GetUpdateResponseMsg получит байты.

Я попробовал API ParseFromString и получил ответ None.

Я пытаюсь десериализовать Protobuf обратно в читаемый человеком формат.

Есть ли что-нибудь еще, что я могу попробовать?

1 ответ

Решение

Вы должны десериализовать ответ. Передайте тип 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 - это сообщение, которое вы получите в ответ.

Дайте знать, если у вас появятся вопросы.

Другие вопросы по тегам