问题描述
尝试解析从我的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)
。