在C#中解包Python生成的MessagePack导致“;解包器不在数组头中”;

本文关键字:包器不 导致 数组 Python MessagePack | 更新日期: 2023-09-27 18:24:54

我正试图通过ZeroMQ从Python代码向C#发送一条消息。我在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的使用有缺陷。提前感谢您的帮助。

在C#中解包Python生成的MessagePack导致“;解包器不在数组头中”;

更新:真正的原因比我删除的解释要愚蠢得多。我在原始代码中调用了packb()两次。