从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转换为通用列表。
答案 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"]);