2011-12-09 26 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