C # .net 4. Помощь по извлечению данных из дочерней группы в объекте словаря - PullRequest
0 голосов
/ 01 декабря 2011

Я новичок в программировании на C # и у меня проблемы со словарем, использующим .net 4.0.

Я отправил объект JSON через JavaScriptSerializer в Dictionary<string, object> объект, который отлично работал при извлечении всех данных.

JSON цепочка

{ 
    "name" : "MrMonkey", 
    "type" : "monkey", 
    "location" : { 
        "id" : "125235",
        "name" : "zoo" 
    }, 
    "owner" : { 
        "id" : "4211", 
        "name" : "Biggles" 
    }
}

В этом объекте словаря у меня есть дочерние уровни, в которых хранится информация, которую мне нужно извлечь из словаря и хранить в другом месте. Скажем, я хочу, чтобы извлечь название места. Как вы можете видеть, он также разделяет имя ключа с родительским уровнем и другим дочерним уровнем.

Для родительского уровня я могу извлекать информацию так же просто, как contact.name = dict["name"].ToString();, но как мне поступить с извлечением необходимой информации из дочерних уровней?

Мне удалось создать обходной путь в JSON.net, чтобы заставить его работать с небольшим переворотом, проверив тип данных и затем преобразовав его, если он попадает в определенный тип, но это ухудшало, и мне сказали боссом не использовать JSON.net.

Ответы [ 3 ]

1 голос
/ 01 декабря 2011

Не пытаясь, я бы попробовал что-то вроде: (dict["location"] as Dictionary<string,object>)["name"], как я предполагаю из предоставленного вами JSON, что сами дочери снова десериализованы в Dictionary с.

В любом случае, отладчик вам здесь очень поможет. Если вы установите точку останова на строке после вызова десериализации, вы можете проверить свой словарь (навести на него курсор мыши и подождать секунду) и посмотреть, как ваша структура теперь хранится в объектах C #.

0 голосов
/ 01 декабря 2011

Вы пробовали использовать dict["location"]["name"]?

Я предполагаю, что дочерний уровень просто рассматривается как другой словарь, сохраненный в родительском ...

0 голосов
/ 01 декабря 2011

Я бы попытался создать класс, который бы заполнил его результатом json. Затем работайте нормально и при необходимости снова сериализуйте в json.

public class MyObject
{
  public string name { get;set; }
  public string type { get;set; }
  public Location location { get;set; }
  public Owner owner { get;set; }
}

public class Location
{
  public int id { get;set; }
  public string name { get;set; }
}

public class Owner
{
  public int id { get;set; }
  public string name { get;set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...