我从HTTP GET请求获得一个json,看起来像用"NewtonSoft.Json"解析后:
dynamic data = JsonConvert.DeserializeObject(responseString);
Run Code Online (Sandbox Code Playgroud)
responseString的位置是:
{"name1":{"id":123456789,"name":"nickname","profileIconId":1114,"summonerLevel":30}}
Run Code Online (Sandbox Code Playgroud)
如您所见,名称每次都会更改,我想知道如何data.name1.name在每次更改name1时更改这一点.
如果json看起来像我怎么办:
{"name1":{"id":123456789,"name":"nickname","profileIconId":1114,"summonerLevel":30},"name2":{"id":123456789,"name":"nickname","profileIconId":948,"summonerLevel":30}}
Run Code Online (Sandbox Code Playgroud)
您可以反序列化为JObject而不是动态序列,这使您可以访问方便的属性,例如First,使您可以在不知道属性名称的情况下向下浏览对象结构,并data根据您的编辑使用foreach循环遍历对象。
一旦达到所需的级别,就可以使用ToObject扩展方法将JObject解析为强类型。
请注意,您需要包括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; }
}
Run Code Online (Sandbox Code Playgroud)
如果愿意LINQ,您可以随时根据上的Values()方法检索值,JObject然后选择每个成员。
var names = data.Values().Select(x => x.ToObject<Name>()).ToList();
Run Code Online (Sandbox Code Playgroud)
这将导致以下Name对象集合。
| 归档时间: |
|
| 查看次数: |
3710 次 |
| 最近记录: |