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

C# 在不创建类的情况下反序列化JSON响应,c#,json,C#,Json,从API调用的结果来看,我需要处理大量JSON 我现在有这个 Object convertObj = JsonConvert.DeserializeObject(responseFromServer); 我知道我可以做类似的事情 Movie m = JsonConvert.DeserializeObject<Movie>(responseFromServer); var itemName = convertObj["Name"]; 理想情况下,我想做一些像 Movie m =

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

我现在有这个

Object convertObj = JsonConvert.DeserializeObject(responseFromServer);
我知道我可以做类似的事情

Movie m = JsonConvert.DeserializeObject<Movie>(responseFromServer);
var itemName = convertObj["Name"];
理想情况下,我想做一些像

Movie m = JsonConvert.DeserializeObject<Movie>(responseFromServer);
var itemName = convertObj["Name"];
获取列表中第一项的“名字”值

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

我不想创建该类的原因是我不是API的所有者,并且字段结构可能会更改

编辑

好的,我创建了这个类,因为它似乎是最好的方法,但是有没有办法将JSON反序列化到一个列表中呢

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

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

您可以尝试使用
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;

您可以尝试使用
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;

无需使用
dynamic
,您只需使用
JToken
,它已经实现了您的期望:

var json = @"
    {
        ""someObj"": 5
    }
";
var result = JsonConvert.DeserializeObject<JToken>(json);
var t = result["someObj"]; //contains 5
var json=@”
{
“someObj”:5
}
";
var result=JsonConvert.DeserializeObject(json);
var t=结果[“someObj”]//包含5个

无需使用
动态
,您只需使用
JToken
,它已经实现了您的期望:

var json = @"
    {
        ""someObj"": 5
    }
";
var result = JsonConvert.DeserializeObject<JToken>(json);
var t = result["someObj"]; //contains 5
var json=@”
{
“someObj”:5
}
";
var result=JsonConvert.DeserializeObject(json);
var t=结果[“someObj”]//包含5个
您可以使用

你可以用

使用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"]);
使用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"]);

你可以使用
Dynamic
,但不建议使用。可能重复@mohithrivastava为什么不建议使用它?可能重复@Jim bcoz Dynamic typing是因为它经常隐藏在编译过程中可能暴露的错误。这样的bug只会在运行时出现,这当然会让检测变得更加困难。你可以使用
动态
,但不建议使用。可能重复@mohithrivastava为什么不建议使用它?可能重复@Jim bcoz动态类型是因为它经常隐藏编译过程中可能暴露的bug。这样的bug只会在运行时出现,这当然会使检测变得更加困难。