Asp.Net Извлечение данных из глубины словаря- - PullRequest
0 голосов
/ 09 декабря 2011

Относительно новичок здесь с небольшим вопросом. Я извлекал строку json, которая выглядит следующим образом (в данном случае это измененный результат из Facebook oauth2.

{ "ID": "555555555555555", "имя": "Обезьяна Человек " "last_name": "Человек", "first_name": "Обезьяна", "электронная почта": "Тест \ u0040someaccount.com", "место": { "ID": "555555555555555", "имя":" Джунгли , к северу Каролина "}," пол ":" мужчина " "работа": [{ "работодатель": { "ID": "555555555555555", "имя":" Большой Босс заставляет меня работать "}:" projects ": {" current ":" делать вещи ", «Предыдущий»: "другое вещи "}," location ": {" id ":" 555555555555555 "," name ":" Jungle, North " Каролина "}," позиция ": {" ID ":" 555555555555555" , "имя": "IT обезьяна "}," start_date ":" 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();

Теперь наступит трудная часть, на которой я застрял.

Я пытаюсь извлечь имя работодателя «Большой босс заставляет меня работать» из следующей части строки ...

"работа": [{"работодатель": {"id": "555555555555555", "name": "Большой босс делает меня работа "}:" проекты ": {" текущий ":" делать вещи "," предыдущий ":" другой вещи "}," location ": {" id ":" 555555555555555 "," name ":" Jungle, North " Каролина "}," позиция ": {" ID ":" 555555555555555" , "имя": "IT обезьяна "}," start_date ":" 2010-09" }]

Он хранит данные в массиве внутри других объектов, и я понятия не имею, как получить информацию для ее извлечения или даже как извлечь информацию, подобную этой, из live oauth2 ...

"address": {"personal": {"street": null, "street_2": null, "city": "Джунгли", "штат": "NC", "postal_code": "28677", "region": "United Штаты "}," business ": {" street ":" Tree Street "," street_2 ": null, "city": "Jungle", "state": "NC", "postal_code": "28677", "region": "Соединенные Штаты"}}

Как вы можете видеть, это углубляется на три уровня, поэтому my (d ["location"] как Dictionary) ["name"]. ToString (); здесь довольно бесполезно Как бы вы узнали, как получить название улицы?

Надеюсь, мои вопросы не слишком расплывчаты или случайны. Мне просто нужен совет по правильному извлечению данных из объектов словаря. Способы, которые я придумываю, включают редактирование строки json, и это вызывает множество проблем, поскольку я просто недостаточно хорошо понимаю объект словаря, чтобы понять это самостоятельно

Спасибо

1 Ответ

3 голосов
/ 09 декабря 2011

Запустив JSON через jsonlint.com (и немного его исправив), он выглядит следующим образом:

{
    "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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...