2016-11-22 2 views
0

Из результата вызова API у меня есть большое количество JSON для обработки.Deserializing ответ JSON без создания класса

настоящее время у меня этот

Object convertObj = JsonConvert.DeserializeObject(responseFromServer); 

Я знаю, что я мог бы сделать что-то вроде

Movie m = JsonConvert.DeserializeObject<Movie>(responseFromServer); 

И затем использовать его как

m.FieldName 
m.AnotherField 
//etc 

В идеале я хотел бы сделать что-то подобные

var itemName = convertObj["Name"]; 

, чтобы получить первое значение имени для первого элемента в списке.

Возможно ли это, или мне нужно создать класс для десериализации?

Причина, по которой я не хочу создавать класс, я не являюсь владельцем API, и структура поля может измениться.

Редактировать.

Хорошо, поэтому я создал класс, поскольку он кажется лучшим подходом, но есть ли способ десериализовать JSON в список?

var sessionScans = new List<SessionScan>(); 
sessionScans = JsonConvert.DeserializeObject<SessionScan>(responseFromServer); 

Жалуется на то, что он не может преобразовать SessionScan в общий список.

+0

u может использовать 'Dynamic', но это не рекомендуется. –

+0

Возможный дубликат [Deserialize JSON в динамический объект C#?] (Http://stackoverflow.com/questions/3142495/deserialize-json-into-c-sharp-dynamic-object) – Davatar

+0

@MohitShrivastava Почему это не рекомендуется * ? – Jim

ответ

0

Вы можете попробовать с JObject.Parse:

dynamic convertObj = JObject.Parse("{ 'Name': 'Jon Smith', 'Address': { 'City': 'New York', 'State': 'NY' }, 'Age': 42 }"); 

string name = convertObj.Name; 
string address = convertObj.Address.City; 
0

Нет необходимости использовать dynamic, вы можете просто использовать JToken, который уже делает то, что вы ожидаете:

var json = @" 
    { 
     ""someObj"": 5 
    } 
"; 
var result = JsonConvert.DeserializeObject<JToken>(json); 
var t = result["someObj"]; //contains 5 
0

Использование Newtonsoft.Json

using Newtonsoft.Json; 
using Newtonsoft.Json.Linq; 

var json = "[{'a':'aaa','b':'bbb','c':'ccc'},{'a':'aa','b':'bb','c':'cc'}]"; 
var ja = (JArray)JsonConvert.DeserializeObject(json); 
var jo = (JObject) ja[0]; 
Console.WriteLine(jo["a"]);