在不创建类的情况下反序列化JSON响应

时间:2016-11-22 04:29:34

标签: c# json

从API调用的结果来看,我需要处理大量的JSON。

我目前有这个

Object convertObj = JsonConvert.DeserializeObject(responseFromServer);

我知道我可以做类似

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

然后像

一样使用它
m.FieldName
m.AnotherField
//etc

理想情况下,我想做一些像

这样的事情
var itemName = convertObj["Name"];

获取列表中第一个项目的第一个Name值。

这是可能的,还是我必须创建一个反序列化的类?

我不想创建类的原因是我不是API的所有者,并且字段结构可能会发生变化。

编辑。

好的,所以我创建了这个类似乎是最好的方法,但有没有办法将JSON反序列化为一个列表?

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

抱怨说它无法将SessionScan转换为通用列表。

4 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

无需使用dynamic,您只需使用已经达到预期效果的JToken

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

答案 2 :(得分:0)

您可以使用Json.NET's LINQ to JSON API

JObject o = JObject.Parse(jsonString);
string prop = (string)o["prop"];

答案 3 :(得分: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"]);