2016-11-22 56 views
0

從API調用的結果來看,我有大量的JSON需要處理。反序列化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

你可以使用'Dynamic',但不推薦。 –

+0

[反序列化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"]);