2015-09-07 24 views
3

我有一個json字符串是這樣的:如何獲得通用詞典中的值?

{ 
    "ipaddress": "xxx", 
    "hostname": "comcast.xxx", 
    "popup": { 
    "position": "1256", 
    "pagename": "home" 
    } 
} 

在我的Windows窗體的代碼,我一直在使用JavaScriptSerializer對法爾那些線字典。

var obj = new JavaScriptSerializer().Deserialize<Dictionary<string, object>>(json); 

目前工作正常,但我不知道如何在popup內獲得價值?因爲它是另一本字典。

[7] = {[popup, System.Collections.Generic.Dictionary`2[System.String,System.Object]]} 

謝謝先進。

回答

3

做的最快的(但不安全)方式,它是這樣的經由索引:

首先提取第一字典和鑄造,由於第一字典將產生object類型的對象:

var popup = (Dictionary<string, object>)obj["popup"]; 

然後,您可以根據鍵提取值:

var position = popup["position"]; 
var pagename = popup["pagename"]; 

如果你不知道這兩個鍵將在結果中存在,您可以用Dictionary.TryGetValue如果它們存在:

obj position; 
if (!popup.TryGetValue("position", out position)) 
{ 
    // Key isn't in the dictionary. 
} 
+1

這是錯誤,'不能用[]應用索引一個'object'類型的表達式,我一開始嘗試過,但它不起作用。 – vietnguyen09

+0

請參閱我編輯的答案。 –

+0

這將需要一個強制轉換,因爲編譯器只知道它是一個'object'而不是'IDictionary ' –

1

使用JSON .Net,後來乾脆:

JObject dynJson = JObject.Parse(jsonString); 

依次爲:

string data = dynJson["popup"]["position"]; 

JObject.Parse

+0

我也試過,但是當我壓縮和混淆代碼時,我的應用程序已停止工作。 – vietnguyen09

+1

@ vietnguyen09所以沒有壓縮/混淆器上面的代碼確實爲你工作? :) – Maverik

+0

是的,它工作正常與混淆器,這是非常好的幫助類 – vietnguyen09