Asp.Net从字典深处提取数据<string,object> - </string,object>

时间:2011-12-09 15:17:22

标签: c# asp.net json dictionary

这里有一个小问题相对新手。我一直在提取一个看起来像这样的json字符串(在这种情况下,它是来自Facebook oauth2的修改后的返回。

  

{ “ID”: “555555555555555”, “名称”:“猴   人 “ ”姓氏“: ”人“, ”FIRST_NAME“: ”西游记“, ”电子邮件“: ”测试\ u0040someaccount.com“, ”位置“:{ ”ID“: ”555555555555555“, ”名“:” 丛林,   北   卡罗来纳州 “},” 性别 “:” 男 “ ”工作“:[{ ”雇主“:{ ”ID“: ”555555555555555“, ”名“:” 大   老板让我工作“}:”项目“:{”当前“:”做事“,   “前面的”:“其他   东西“},”location“:{”id“:”555555555555555“,”name“:”丛林,北方   卡罗来纳州 “},” 位置 “:{” ID “:” 555555555555555" , “名”:“IT   猴 “},” 起始日期 “:” 2010-09 “}],” 图象 “:” 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);

然后我从字典中提取数据,并将它们存储在一个名为contact的对象中,该对象几乎只是一个字符串集合。

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

我是这样做的,因为我没有得到信息,所以信息领域都将存在。

如果在该值中设置了一个对象,例如地址,我使用了修改后的代码(感谢那些向我展示如何操作的人),如下所示。

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

现在我遇到困难的部分。

我正试图从字符串的以下部分提取雇主名称“Big Boss让我工作”......

  

“work”:[{“雇主”:{“id”:“555555555555555”,“名字”:“Big Boss让我   work“}:”projects“:{”current“:”doing stuff“,”previous“:”other   东西“},”location“:{”id“:”555555555555555“,”name“:”丛林,北方   卡罗来纳州 “},” 位置 “:{” ID “:” 555555555555555" , “名”:“IT   猴 “},” 起始日期 “:” 2010-09" }]

它将数据存储在其他对象内的数组中,我不知道如何获取信息来提取它,甚至不知道如何从live oauth2中提取这样的信息......

  

“地址”:{“personal”:{“street”:null,“street_2”:null,“city”:   “Jungle”,“state”:“NC”,“postal_code”:“28677”,“region”:“United   国家“},”business“:{”street“:”Tree Street“,”street_2“:null,   “城市”:“丛林”,“州”:“NC”,“postal_code”:“28677”,“地区”:   “美国”}}

正如你所看到的那样深入三级,所以我的(d [“location”]为Dictionary)[“name”]。ToString();这里很无用。你怎么会从这里说出街道名称?

我希望我的问题不会太模糊或随意。我只需要一些关于从字典对象中正确提取数据的建议。我提出的方法涉及编辑json字符串并导致各种问题,因为我只是不能很好地理解字典对象以便自己解决这个问题

由于

1 个答案:

答案 0 :(得分:3)

通过jsonlint.com运行您的JSON(并稍微纠正),它看起来像这样:

{
    "id": "555555555555555",
    "name": "Monkey Man",
    "last_name": "Man",
    "first_name": "Monkey",
    "email": "test@someaccount.com",
    "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