从计算机序列化JSON数组出错
所以我想从我的电脑序列化Json数组。从计算机序列化JSON数组出错
我跟着这个问题的答案:Serialize and Deserialize Json and Json Array in Unity
唯一的区别是,我的JSON的来源是从我的桌面。
我有我的文件中的JsonHelper函数,fixJson函数和播放器类。
在我启动功能,我有以下代码:
jsonString = fixJson(System.IO.File.ReadAllText("/Users/sroubert/Desktop/playerDummyDataTest.json"));
dummyPlayer = JsonHelper.FromJson<Player> (jsonString);
print (jsonString);
print (dummyPlayer[0].playerLoc);
我在文件的顶部有以下定义dummyPlayer:
public Player[] dummyPlayer;
的print (jsonString)
命令工作正常。它输出以下:
但是,代码从打印抛出NullReference异常(dummyPlayer [0] .playerLoc)。
我测试用下面的函数jsonHelper:
string jsonString = "{\r\n \"Items\": [\r\n {\r\n \"playerId\": \"8484239823\",\r\n \"playerLoc\": \"Powai\",\r\n \"playerNick\": \"Random Nick\"\r\n },\r\n {\r\n \"playerId\": \"512343283\",\r\n \"playerLoc\": \"User2\",\r\n \"playerNick\": \"Rand Nick 2\"\r\n }\r\n ]\r\n}";
dummyPlayer = JsonHelper.FromJson<Player>(jsonString);
print (jsonString);
Debug.Log(dummyPlayer[0].playerLoc);
打印(jsonString)输出为恰好相同。但是,没有NullReferenceException。打印出Powai。
有谁知道可能会发生什么?
问题是,你正试图将一个对象反序列化成一个数组,这是行不通的。什么适合Player[]
会是这样:
[
{
"playerId" : "8484239823",
"playerLoc" : "Powai",
"playerNick" : "Random Nick"
},
{
"playerId" : "512343283",
"playerLoc" : "User2",
"playerNick" : "Rand Nick 2"
}
]
注意这一点,你现在试图反序列化和答案应该是明确的
我试过了。不工作。 Unity本身不支持数组JSON序列化,因此您必须使用用户帮助函数。请阅读我发布的其他stackoverflow问题的答案。jsonHelper函数要求将数组包装在JSON对象中。 –
@ SebastianRoubert:不确定JsonHelper。您可能需要使用'dummyPlayer = JsonHelper.FromJson
我解决了这个问题。问题是我将fixJson定义为:string fixJson(string value) \t { \t \t value =“{\ n”+“\”Player \“”+“:”+ value +“\ n”+“}} “; \t \t返回值; \t} ....但你必须让它的项目,因为jsonHelper的方式定义。 –
固定它的JSON对象之间的性差异。
问题出在我的fixJson函数中。我定义它像下面这样:
string fixJson(string value)
{
value = "{\n" + "\"Player\""+ ": " + value + "\n" + "}";
return value;
}
但你必须把它定义正是这样的:
string fixJson(string value)
{
value = "{\n" + "\"Items\""+ ": " + value + "\n" + "}";
return value;
}
这是因为“项目”在jsonHelper功能明确使用。
你从复本中获得了'fixJson'函数。没有必要再次发布。 – Programmer
JsonHelper.FromJson将返回数组的实例,而不是Player的数组。我相信,你需要反序列化它 –
NullReferenceException甚至没有指向anyhting,你在这里显示... – Vogel612