在C#中浏览动态对象(json)

时间:2016-06-24 21:14:22

标签: c# json.net

我从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}}

1 个答案:

答案 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(); 个对象的集合。

enter image description here