2011-12-09 25 views
0

這裏有一個小問題,相對來說比較新鮮。我被提取JSON字符串,看起來像這樣(在這種情況下,它是來自Facebook的oauth2修改的回報Asp.Net從字典中提取深層數據<string,object> -

{「ID」:「555555555555555」,「名」:「猴子 人」,「姓氏「:」Man「,」first_name「:」Monkey「,」email「:」test \ u0040someaccount.com「,」location「:{」id「:」555555555555555「,」name「:」Jungle, North Carolina 「}」,「gender」:「male」,「work」:[{「employer」:{「id」:「555555555555555」,「name」:「Big Boss讓我工作」}:當前「:」做東西「, 」previous「:」other stuff「},」location「:{」id「:」555555555555555「,」name「:」Jungle,North Carolina「},」position「 {「id」:「555555555555555」,「name」:「IT monkey「},」start_date「:」2010-09「}],」picture「:」http://profile.ak.fbcdn.net/static-ak/rsrc.php/v1/yo/r/5555555- 555.gif「}

好吧,我可以通過使用下面的代碼

JavaScriptSerializer ser = new JavaScriptSerializer(); 
    Dictionary<string, object> dict = ser.Deserialize<Dictionary<string,object>>(json); 

然後我提取數據從字典以下,並將它們存儲在一個對象的一切解壓到一個字典所謂的聯繫幾乎只是一串字符串。

if (d.ContainsKey("email")) 
    { 
     c.email = d["email"].ToString(); 
    } 
    else 
     c.email = ""; 

我是這樣做的,因爲我沒有保證信息字段都會在那裏。

如果在值中設置了一個對象,例如地址,我使用修改後的代碼(感謝指示我如何操作的人),如下所示。

c.location = (d["location"] as Dictionary<string, object>)["name"].ToString(); 

現在來困難的部分,我卡住了。

我試圖提取僱主名「大老闆讓我工作」從字符串的以下部分...

「工作」:[{「僱主」:{「ID」: 「555555555555555」,「name」:「Big Boss讓我 工作」}:「projects」:{「current」:「做東西」,「previous」:「其他 stuff」},「location」:{「id 「:」555555555555555「,」name「:」Jungle,North Carolina「},」position「:{」id「:」555555555555555「,」name「:」IT monkey「},」start_date「 09「}]

這是降級存儲數據的數組中的其他對象的內部,我不知道如何獲取信息,提取它,甚至如何提取信息,這樣從活的oauth2 ...

「地址「:{」personal「:{」street「:null,」street_2「:null,」city「: 」Jungle「,」state「:」NC「,」postal_code「:」28677「,」region「 「United States」},「business」:{「street」:「Tree Street」,「street_2」:null, 「city」:「Jungle」,「state」:「NC」,「postal_code」:「28677 「,」region「: 」United States「}}

正如您所見這深入三層,所以我的(d [「location」]作爲Dictionary)[「name」]。ToString();這裏很沒用。你會如何去從這裏說街道名稱?

我希望我的問題不太含糊或隨意。我只是需要一些關於從字典對象中正確提取數據的建議。我想出辦法涉及編輯JSON字符串和引起的問題alsorts,我只是不明白的字典對象不夠好,這出在我自己的

感謝

回答

3

奔跑穿過jsonlint您的JSON .COM(略修正它),它看起來像這樣的格式:

{ 
    "id": "555555555555555", 
    "name": "Monkey Man", 
    "last_name": "Man", 
    "first_name": "Monkey", 
    "email": "[email protected]", 
    "location": { 
     "id": "555555555555555", 
     "name": "Jungle, North Carolina" 
    }, 
    "gender": "male", 
    "work": [ 
     { 
      "employer": { 
       "id": "555555555555555", 
       "name": "Big Boss makes me work" 
      }, 
      "projects": { 
       "current": "doing stuff", 
       "previous": "other stuff" 
      }, 
      "location": { 
       "id": "555555555555555", 
       "name": "Jungle, North Carolina" 
      }, 
      "position": { 
       "id": "555555555555555", 
       "name": "IT monkey" 
      }, 
      "start_date": "2010-09" 
     } 
    ], 
    "picture": "http://profile.ak.fbcdn.net/static-ak/rsrc.php/v1/yo/r/5555555-555.gif" 
} 

你的JSON數據在這種情況下,僅僅是不是真的適合被序列化到一個簡單的Dictionary對象,所以這不是真正的辦法到這裏。

更簡單的方法是創建一個C#類,該類定義了與您反序列化的Javascript對象相同的屬性。然後,將JSON反序列化爲該對象,並且您應該能夠訪問「」Big Boss讓我工作「值應該在objectFromJson.work[0].employer.name