public async Task <Thing> GetThingById(string id, CancellationToken token, IProgress <float> progress, bool ignoreCache) { if (!ignoreCache && _cacheProvider != null) { var cachedThing = await _cacheProvider.GetThingById(id); if (cachedThing != null) { return(cachedThing); } } var targetUri = string.Format("/by_id/{0}.json", id); var thingStr = await GetAuthedString(targetUri, token, progress); Thing result = null; if (thingStr.StartsWith("{\"kind\": \"Listing\"")) { var listing = JsonConvert.DeserializeObject <Listing>(thingStr); result = listing.Data.Children.First(); } else { result = JsonConvert.DeserializeObject <Thing>(thingStr); } if (_cacheProvider != null) { await _cacheProvider.SetThing(result); } return(result); }