Подтвердить что ты не робот

Newtonsoft JSON Deserialize

Мой JSON выглядит следующим образом:

{"t":"1339886","a":true,"data":[],"Type":[['Ants','Biz','Tro']]}

Я нашел библиотеку десериализации Newtonsoft JSON.NET для С#. Я попытался использовать его следующим образом:

object JsonDe = JsonConvert.DeserializeObject(Json); 

Как я могу получить доступ к объекту JsonDe, чтобы получить все данные "Тип"? Я пробовал его с помощью цикла, но он не работает, потому что у объекта нет счетчика.

4b9b3361

Ответ 1

Вы можете реализовать класс, который содержит поля, которые у вас есть в JSON

class MyData
{
    public string t;
    public bool a;
    public object[] data;
    public string[][] type;
}

а затем используйте общую версию DeserializeObject:

MyData tmp = JsonConvert.DeserializeObject<MyData>(json);
foreach (string typeStr in tmp.type[0])
{
    // Do something with typeStr
}

Документация: Сериализация и десериализация JSON

Ответ 2

Более простое решение: использование динамического типа

Как и в Json.NET 4.0 Release 1, существует встроенная поддержка dynamic. Вам не нужно объявлять класс, просто используйте dynamic:

dynamic jsonDe = JsonConvert.DeserializeObject(json);

Все поля будут доступны:

foreach (string typeStr in jsonDe.Type[0])
{
    // Do something with typeStr
} 

string t = jsonDe.t;
bool a = jsonDe.a;
object[] data = jsonDe.data;
string[][] type = jsonDe.Type;

С динамическим вам не нужно создавать определенный класс для хранения ваших данных.

Ответ 3

В соответствии с Newtonsoft Documentation вы также можете десериализовать анонимный объект следующим образом:

var definition = new { Name = "" };

string json1 = @"{'Name':'James'}";
var customer1 = JsonConvert.DeserializeAnonymousType(json1, definition);

Console.WriteLine(customer1.Name);
// James