Получение вложенных данных из JSON в C # - PullRequest
1 голос
/ 20 июля 2010

У меня есть JSON с двумя объектами, каждый из которых имеет 3 вложенных объекта.

{ "FirstPerson": { "number": "101", "a10": "1001", "a20": "1002" }, "SecondPerson": { "number": "102", "a10": "2001", "a20": "2001" } }

В c # asp.net mvc2 я смог добраться до "FirstPerson"или «SecondPerson» с использованием Hashtable, но как мне получить «number» или «a10», когда я знаю «FirstPerson»?

например, объекты внутри объекта.

Является ли Hashtable лучшим вариантом для этого или я должен использовать что-то еще?

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 20 июля 2010

Я обнаружил, что решение вашей проблемы может дать ключ к решению этого вопроса

Хотите преобразовать объект C # в его эквивалент JSON? Вот простой объект из пространства имен System.Web.Script, который делает именно это:

System.Web.Script.Serialization.JavaScriptSerializer. Он хранится в DLL-библиотеке System.Web.Extentions (только .Net Framework 3.5)

Используя этот объект, мы сериализуем и десериализуем объекты в C #. Вот быстрый пример:

Простой объект Employee:

public class Employee
{
    public string Name { get; set; }
    public string Age { get; set; }
    public string ID { get; set; }   
}

Добавление некоторых их экземпляров в список:

Сотрудник oEmployee1 =

   new Employee{Name="Pini",ID="111", Age="30"};

Сотрудник oEmployee2 =

  new Employee { Name = "Yaniv", ID = "Cohen", Age = "31" };

Сотрудник oEmployee3 =

    new Employee { Name = "Yoni", ID = "Biton", Age = "20" };

Список oList = новый список ()

{ oEmployee1, oEmployee2, oEmployee3 };

Сериализация затем:

System.Web.Script.Serialization.JavaScriptSerializer oSerializer = новый System.Web.Script.Serialization.JavaScriptSerializer (); строка sJSON = oSerializer.Serialize (oList);

А вот и вывод:

[{"Name":"Pini","Age":"30","ID":"111"},

{"Name":"Yaniv","Age":"31","ID":"Cohen"},

{"Name":"Yoni","Age":"20","ID":"Biton"}]

Для вашего рассмотрения вот ссылка http://blogs.microsoft.co.il/blogs/pini_dayan/archive/2009/03/12/convert-objects-to-json-in-c-using-javascriptserializer.aspx

2 голосов
/ 20 июля 2010

У меня были хорошие результаты при использовании JsonConvert. Кажется, он хорошо знает, что делать с коллекциями. Просто определите класс, который вы хотите десериализовать, и получите его.

http://james.newtonking.com/projects/json-net.aspx

Пример:

MyCollection col = JsonConvert.DeserializeObject<MyCollection>(this.HttpContext.Request.Params[0]);

Где MyCollection - это класс, который содержит коллекцию, в вашем случае, людей.

1 голос
/ 20 июля 2010

Вы можете назначить объект JSON динамической переменной и таким образом получить доступ к свойствам (только в C # 4.0)

dynamic jsonData = jsonObject;
int workflowNum = jsonData.SecondPerson[0].workflow;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...