2016-08-16 64 views
0

使用JSON文件看起來像這樣,是否有可能在Unity中反序列化字典?

{ 
"dict": {"key": "value"} 
} 

我怎樣才能使一個名爲「字典」的字典,看起來像這樣{「關鍵」:「值」}在Unity?

這是我的課。

[Serializable] 
public class MyJson 
{ 
    public Dictionary<string,string> dict; 
} 

我不知道爲什麼,但是當我嘗試使用這個類,它似乎並沒有改變字典到字典,我預計JsonUnility.FromJson()方法。相反,它只是空。

編輯:我見過,在統一的文檔它說:「字典中不支持」那麼有沒有創建字典容易一些方便的方法或我將不得不與數據拼湊它自己?

這是一個潛在的JSON。雖然這是我創建了另一個問題,但我是用python創建了JSON,這意味着我的字典中可能有不同的值類型,但這對C#不起作用,因此現在它只是字符串,我會稍後爲此找出一些事情。 (可能是通過使所有的列表,然後是隻串的人只會有1元)

{ 
    "pages": [ 
    { 
     "files": "[null, null, null, null]", 
     "imagepath": "C:/Users/Jeff/Pictures/location_sharing.png", 
     "pageNum": "0", 
     "polygons": "[[[122, 184], [178, 180], [174, 159], [126, 158]], [[191, 157], [194, 185], [241, 183], [246, 154]], [[334, 219], [323, 236], [323, 247], [338, 259], [358, 259], [364, 236], [356, 221], [344, 215]], [[512, 221], [503, 235], [508, 256], [518, 267], [538, 260], [548, 250], [541, 228], [529, 218]]]" 
    }, 
    { 
     "files": "[null, null, null]", 
     "imagepath": "C:/Users/Jeff/Pictures/node.png", 
     "pageNum": "1", 
     "polygons": "[[[189, 149], [181, 152], [188, 170], [197, 182], [196, 173], [192, 153]], [[233, 176], [258, 171], [244, 144]], [[116, 260], [143, 227], [181, 210], [225, 202], [276, 199], [305, 210], [353, 222], [360, 252], [361, 266]]]" 
    }]} 
+0

閱讀 - http://stackoverflow.com/a/38535392/294884 – Fattie

+0

可能重複[什麼是循環銷售數據的JSON以在Unity中創建圖表的最佳方式?](http:// stackoverflow。 com/questions/38535239/whats-the-best-way-to-loop-through-a-json-of-sales-data-to-create-a-graph-in-un) – Fattie

+1

[JSON反序列化在Unity C#中使用MiniJSON](http://stackoverflow.com/questions/36239705/deserialization-of-json-using-minijson-in-unity-c-sharp) – Cabrra

回答

4

您更新的示例架構看起來不像是字典。由於pages每個元素是不實際的嵌套JSON但是這看起來像它可以被interpeted嵌套的JSON字符串中的所有你需要做的是有

[Serializable] 
public class PageContainer 
{ 
    Page[] pages; 
} 

[Serializable] 
public class Page 
{ 
    public string files; 
    public string imagepath; 
    public string pagenum; 
    public string polygons; 
} 

然後做一個

PageContainer pageContainer = JsonUtility.FromJson<PageContainer>(yourString); 

然後你會可能需要做更多

FileContainer fileContainer = JsonUtility.FromJson<FileContainer>(pageContainer.files); 
PolygonContainer polygonContainer = JsonUtility.FromJson<PolygonContainer>(pageContainer.polygons); 

並根據需要進行必要的類。

+0

這會清理很多東西。我在其他地方看過一篇有着非常相似想法的帖子,但我不明白。這現在非常合理。我從來沒有想過製作另一個json,而不是將「{}」中的內容用作字典。我想我錯過了這個,因爲我在python中創建了數據作爲字典,然後當它使用相同的符號(花括號)時,我只是認爲它必須是一個字典,這是唯一的選擇。我認爲這會很好!感謝一堆無論如何! – ToxicGLaDOS

+0

@ToxicGLaDOS oops,我忘了在這兩個類上放置'[Serializable]',你將需要JsonUtility的工作。 –

0

我會創造什麼都你的存儲模型。我將它稱爲KeyValue,因爲我不確定你實際存儲的是什麼。然後我會按照您的指定給這個模型兩個字符串屬性。一個名爲key的字符串屬性,另一個名爲value的字符串屬性。

Dictionary<KeyValue> keyValues = new Dictionary<KeyValue>(); 
    //of course here instead of hard coding I would pass values in from where ever you are getting them. 
    KeyValue kv1 = new KeyValue("myKey1", "myValue1"); 
    KeyValue kv2 = new KeyValue("myKey2", "myValue2"); 

    keyValues.Add(kv1); 
    keyValues.Add(kv2); 

因此,這應該給你一個很好的跳躍點假設我理解你正確的問題,但總的想法是創建你需要然後填充該字典的類型的字典。

相關問題