public async Task <IDataTransferCollection <Item> > GetItemsByIds(IReadOnlyCollection <int> itemIds) { if (itemIds == null) { throw new ArgumentNullException(nameof(itemIds)); } if (itemIds.Count == 0) { throw new ArgumentException("Item IDs cannot be an empty collection.", nameof(itemIds)); } var request = new ItemsByIdsRequest(itemIds); 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 <Item>(context.ResultCount); JsonConvert.PopulateObject(json, list, Json.DefaultJsonSerializerSettings); return(new DataTransferCollection <Item>(list, context)); }
private async Task <List <string> > GetJsonItemsByIds(IReadOnlyCollection <int> itemIds, bool indented) { var request = new ItemsByIdsRequest(itemIds); 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(item => item.ToString(indented ? Formatting.Indented : Formatting.None)).ToList()); }
public IAsyncEnumerable <Item> GetItemsByIds( IReadOnlyCollection <int> itemIds, Language?language = default, MissingMemberBehavior missingMemberBehavior = default, IProgress <ICollectionContext>?progress = default, CancellationToken cancellationToken = default ) { var producer = SplitQuery.Create <int, Item>( async(range, ct) => { var request = new ItemsByIdsRequest(range) { Language = language, MissingMemberBehavior = missingMemberBehavior }; var response = await request.SendAsync(http, ct).ConfigureAwait(false); return(response.Values); }, progress ); return(producer.QueryAsync(itemIds, cancellationToken: cancellationToken)); }