2017-10-07 33 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