2015-01-11 6 views
1

Я использую API Riot здесь: https://developer.riotgames.com/api/methods#!/909/3144Получить первый элемент результатов JsonConvert?

Этот запрос позволяет вам указать список имен пользователей и запятую.

Я выполнение моего кода следующим образом:

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

Теперь, позволяет сказать, что я хочу, чтобы получить идентификатор первого пользователя возвращаемого в список. Я знаю, что могу сделать это, используя следующий код:

json.prorate.id.ToString(); 

Однако, я не буду обязательно знать индекс первого элемента в списке. В этом конкретном случае его prorate, но он может быть чем-то другим при каждом вызове. Есть ли вызов, который я мог бы сделать, чтобы просто получить первый элемент массива? Что-то вроде json.First().id.ToString()?

ответ

1

Вам не нужно использовать динамический

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(); 
+0

Но что если Бунт изменяет API? Разве это не сломает вещи? –

+0

Плюс, это кажется бессмысленным, чтобы создать класс для всего этого, когда мне нужно всего лишь один фрагмент данных ... затем я выбрасываю и никогда не использую его все снова. –

+0

Кроме того, получение ошибки 'Лучшее перегруженное соответствие метода для 'Newtonsoft.Json.Linq.JObject.Parse (string)' имеет некоторые недопустимые аргументы.' –

Смежные вопросы