python - 错误ArgumentException : JSON must represent an object type from PyZeroMQ server

标签 python c# sockets unity3d

尝试解析从我的Python服务器返回的Json对象时遇到问题。
我得到的错误是
“ArgumentException:JSON必须表示一个对象类型。”
令人费解的是,如果我从服务器返回的确切字符串接受并将其硬编码,然后再将其传递给解析方法Player.CreateFromJSON,它将起作用!
这些是Python服务器中的3条相关行

 x = '{"playerId":8484239823,"playerLoc":"Powai","playerNick":"Random Nick"}'
 y = json.dumps(x)
 socket.send_string(y)
这是返回的JSON字符串。
"{\"playerId\":8484239823,\"playerLoc\":\"Powai\",\"playerNick\":\"Random Nick\"}"
这是我的Player对象
[System.Serializable]
public class Player
{
    public string playerId;
    public string playerLoc;
    public string playerNick;

    public static Player CreateFromJSON(string jsonString)
    {
        return JsonUtility.FromJson<Player>(jsonString);
    }
}
从上面可以看出,我正在使用Unity的本地JsonUtility FromJson方法,我只是简单地调用
Player playerInfo = Player.CreateFromJSON(jsonStringFromServer);
填充Player对象
花了无数个小时来搜寻和尝试寻找类似的问题。欢迎任何反馈或故障排除步骤!

最佳答案

问题出在您的Python代码中。即x已经是一个JSON字符串;您不需要调用json.dumps(x),而可以直接使用socket.send_string(x)直接发送它。
实际上,y = json.dumps(x)返回一个JSON编码的JSON字符串!:

'"{\\"playerId\\":8484239823,\\"playerLoc\\":\\"Powai\\",\\"playerNick\\":\\"Random Nick\\"}"'
不能将其解码为Player对象-因为它是string!在您的Python代码中删除该行,而只需直接socket.send_string(x)

关于python - 错误ArgumentException : JSON must represent an object type from PyZeroMQ server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63385530/

相关文章:

objective-c - 有没有办法使用 CFNetwork 从 ftp 服务器删除文件/文件夹?

python - 回归中的序数分类数据

python - 独立的 Django 设置

c# - Accordion 与 ListView

c# - 无法将类型 'System.Attribute' 转换为泛型参数 'T' - 为什么?

python - 在 Python 3 中使用套接字获取 400 Bad Request 错误

python - 如何在 discord.py cogs 中创建别名?

python - 使用jupyter在python3中用字符串替换标准输入

c# - 在图片框中显示图标

c# - 无法使用 C# TCP 服务器和 C++ TCP 客户端接收消息