Распаковка сгенерированного Python MessagePack в C# приводит к "Unpacker не находится в заголовке массива"

Я пытаюсь отправить сообщение из кода Python на C# через ZeroMQ. Я использую следующую структуру данных в Python:

message = msgpack.packb(
    (
        {"message_id": "1001", "type": "GET", "namespace": "DocumentManager"},
        "MdiActiveDocument",
        ["parameter1", "parameter2"]
    )
)
message = msgpack.packb(message)
alive_socket.send(message)

Попытка распаковать его с помощью C#, используя этот код:

        var message = new byte[500];
        int result = this.Client.Receive(message);
        var serializer = 
        MessagePackSerializer.Get<Tuple<Dictionary<string,string>, String, List<String>>>();
        var reply = serializer.UnpackSingleObject(message);

Это приводит к этой ошибке:

Additional information: Unpacker is not in the array header.
The stream may not be array.

Я попытался упростить структуру данных, но я все еще не могу понять это правильно. Возможно, мое использование MsgPack некорректно. Заранее благодарю за любую помощь.

1 ответ

Решение

Обновление: реальная причина была намного, намного тупее, чем это объяснение, которое я удалил. Я дважды вызывал packb() в исходном коде.

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