获取JsonConvert结果的第一个元素?

3
我在此处使用Riot的API:https://developer.riotgames.com/api/methods#!/909/3144 该请求允许您提供逗号分隔的用户名列表,并返回用户信息。
我按以下方式执行我的代码:
string getUrl = "https://" + this.regionID + ".api.pvp.net/api/lol/" + this.regionID +
    "/v1.4/summoner/by-name/" + summoner.Text + "?api_key=" + this.apiKey;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(getUrl);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
    dynamic json = JsonConvert.DeserializeObject<dynamic>(reader.ReadToEnd());
}

这将返回以下结果:
{
   "prorate": {
      "id": 20335410,
      "name": "ProRate",
      "profileIconId": 693,
      "revisionDate": 1420864656000,
      "summonerLevel": 30
   },
   "jaxelrod": {
      "id": 31034983,
      "name": "Jaxelrod",
      "profileIconId": 744,
      "revisionDate": 1420999923000,
      "summonerLevel": 30
   }
}

现在,假设我想获取返回列表中第一个用户的ID。我知道可以使用以下代码来实现:

json.prorate.id.ToString();

然而,我并不一定知道列表中第一个元素的索引。在这种情况下,它是prorate,但每次调用时可能会有所不同。是否有一种调用方法可以简单地检索数组的第一个元素?类似于json.First().id.ToString()这样的东西?

1个回答

3
你不需要使用动态技术。
var userList  = JsonConvert.DeserializeObject < Dictionary<string, User>>(json);

public class User
{
    public int id { get; set; }
    public string name { get; set; }
    public int profileIconId { get; set; }
    public long revisionDate { get; set; }
    public int summonerLevel { get; set; }
}

您还可以使用 Linq(语言集成查询)。

var id = JObject.Parse(json).Children().First().Values<int>("id").First();

但是如果Riot更改了API呢?那不会破坏一些东西吗? - Jason Axelrod
此外,当我只需要一个单独的数据时,为所有这些创建一个类似乎有点毫无意义...然后我将其丢弃并再也不使用其余部分。 - Jason Axelrod
同时,出现了错误 The best overloaded method match for 'Newtonsoft.Json.Linq.JObject.Parse(string)' has some invalid arguments. - Jason Axelrod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接