2016-11-22 6 views
0

API呼び出しの結果から、処理するJSONが大量にあります。クラスを作成せずにJSONレスポンスを逆シリアル化する

は、私が現在持っているこの

Object convertObj = JsonConvert.DeserializeObject(responseFromServer); 

私は理想的には、私が何かをしたいと思います

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

ような何かをそして

m.FieldName 
m.AnotherField 
//etc 

ようにそれを使用することができることを承知していますlike

var itemName = convertObj["Name"]; 

リストの最初の項目の最初の名前の値を取得します。

これは可能ですか、またはデシリアライズするクラスを作成する必要がありますか?

私がクラスを作成したくない理由は、APIの所有者ではなく、フィールド構造が変更される可能性があるためです。

編集。

私はクラスを作成しましたが、これは最善のアプローチですが、JSONをリストに逆シリアル化する方法はありますか?

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

SessionScanを一般的なリストに変換できないとの苦情を言います。

+0

「ダイナミック」を使用できますが、お勧めしません。 –

+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

、あなたは単にあなたが期待するものすでにあるんJTokenを使用することができますdynamicを使用する必要はありませんが:

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"]); 
関連する問題