public async Task <IDataTransferCollection <Achievement> > GetAchievementsByIds(IReadOnlyCollection <int> achievementIds) { if (achievementIds == null) { throw new ArgumentNullException(nameof(achievementIds)); } if (achievementIds.Count == 0) { throw new ArgumentException("Achievement IDs cannot be an empty collection.", nameof(achievementIds)); } var request = new AchievementsByIdsRequest(achievementIds); using var response = await _http.SendAsync(request).ConfigureAwait(false); response.EnsureSuccessStatusCode(); var json = await response.Content.ReadAsStringAsync().ConfigureAwait(false); var context = response.Headers.GetCollectionContext(); var list = new List <Achievement>(context.ResultCount); JsonConvert.PopulateObject(json, list, Json.DefaultJsonSerializerSettings); return(new DataTransferCollection <Achievement>(list, context)); }
private async Task <List <string> > GetJsonAchievementsByIds(IReadOnlyCollection <int> achievementIds, bool indented) { var request = new AchievementsByIdsRequest(achievementIds); using var response = await _http.SendAsync(request); using var responseReader = new StreamReader(await response.Content.ReadAsStreamAsync()); using var jsonReader = new JsonTextReader(responseReader); response.EnsureSuccessStatusCode(); // API returns a JSON array but we want a List of JSON objects instead var array = await JToken.ReadFromAsync(jsonReader); return(array.Children <JObject>().Select(achievement => achievement.ToString(indented ? Formatting.Indented : Formatting.None)).ToList()); }