我从HTTP GET请求中获取一个json,看起来就像用" NewtonSoft.Json"
解析它dynamic data = JsonConvert.DeserializeObject(responseString);
responseString是:
{"name1":{"id":123456789,"name":"nickname","profileIconId":1114,"summonerLevel":30}}
如您所见,名称每次都会更改,我想知道如何在data.name1.name
中进行导航,其中name1每次都会更改。
如果json看起来怎么办:
{"name1":{"id":123456789,"name":"nickname","profileIconId":1114,"summonerLevel":30},"name2":{"id":123456789,"name":"nickname","profileIconId":948,"summonerLevel":30}}
答案 0 :(得分:4)
您可以反序列化为JObject而不是动态,这使您可以访问诸如First
之类的便捷属性,这些属性允许您在不知道属性名称的情况下向下遍历对象结构,以及迭代{上的对象{1}}带有foreach循环,基于您的编辑。
一旦达到所需级别,就可以使用data
扩展方法将JObject解析为强类型。
请注意,您需要包含ToObject
命名空间。
Newtonsoft.Json.Linq
如果您更喜欢using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
void Main()
{
var responseString = "{\"name1\":{\"id\":123456789,\"name\":\"nickname\",\"profileIconId\":1114,\"summonerLevel\":30},\"name2\":{\"id\":123456789,\"name\":\"nickname\",\"profileIconId\":948,\"summonerLevel\":30}}";
JObject data = JsonConvert.DeserializeObject<JObject>(responseString);
var names = new List<Name>();
foreach (var x in data) names.Add(x.Value.ToObject<Name>());
names.Dump();
}
public class Name
{
public int id { get; set; }
public string name { get; set; }
public int profileIconId { get; set; }
public int summonerLevel { get; set; }
}
,则可以随时按LINQ
上的Values()
方法检索值,然后选择每个成员。
JObject
这导致以下var names = data.Values().Select(x => x.ToObject<Name>()).ToList();
个对象的集合。