2017-10-07 39 views
0

所以我想从我的电脑序列化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)命令工作正常。它输出以下:

print (jsonString) output

但是,代码从打印抛出NullReference异常(dummyPlayer [0] .playerLoc)。

NullReference

我测试用下面的函数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。

有谁知道可能会发生什么?

+0

JsonHelper.FromJson 将返回数组的实例,而不是Player的数组。我相信,你需要反序列化它 –

+1

NullReferenceException甚至没有指向anyhting,你在这里显示... – Vogel612

回答

1

问题是,你正试图将一个对象反序列化成一个数组,这是行不通的。什么适合Player[]会是这样:

[ 
    { 
     "playerId" : "8484239823", 
     "playerLoc" : "Powai", 
     "playerNick" : "Random Nick" 
    }, 
    { 
     "playerId" : "512343283", 
     "playerLoc" : "User2", 
     "playerNick" : "Rand Nick 2" 
    } 
] 

注意这一点,你现在试图反序列化和答案应该是明确的

+0

我试过了。不工作。 Unity本身不支持数组JSON序列化,因此您必须使用用户帮助函数。请阅读我发布的其他stackoverflow问题的答案。jsonHelper函数要求将数组包装在JSON对象中。 –

+0

@ SebastianRoubert:不确定JsonHelper。您可能需要使用'dummyPlayer = JsonHelper.FromJson '作为dummyPlayer是播放器的数组。 –

+0

我解决了这个问题。问题是我将fixJson定义为:string fixJson(string value) \t { \t \t value =“{\ n”+“\”Player \“”+“:”+ value +“\ n”+“}} “; \t \t返回值; \t} ....但你必须让它的项目,因为jsonHelper的方式定义。 –

0

固定它的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功能明确使用。

+0

你从复本中获得了'fixJson'函数。没有必要再次发布。 – Programmer