Task <IODataDeserializationResult> IODataClientQueryPipeline.DeserializeAsync(IODataTranslationResult translation, System.IO.Stream response) { return(this._pipeline.DeserializeAsync(translation, response)); }
async Task <IODataDeserializationResult> IODataClientQueryPipeline.DeserializeAsync(IODataTranslationResult translation, Stream response) { Throw.IfNull(translation, "translation"); Throw.IfNull(response, "response"); Throw <NotSupportedException> .If( !StringComparer.OrdinalIgnoreCase.Equals(translation.ODataQuery.Format, "json"), () => "Unexpected format " + translation.ODataQuery.Format ); using (var reader = new StreamReader(response)) { var json = await reader.ReadToEndAsync().ConfigureAwait(false); var result = JsonConvert.DeserializeObject <JObject>(json); JToken inlineCountToken; int? inlineCount; if (result.TryGetValue("odata.count", out inlineCountToken)) { inlineCount = inlineCountToken.Value <int?>(); } else { inlineCount = null; } var jValues = result["value"]; Throw <InvalidOperationException> .If(!(jValues is JArray), () => "Expected 'value' json array property. Found '" + jValues + "'"); var values = (IReadOnlyList <object>)jValues.ToObject(translation.RootQuery.ElementType.MakeArrayType()); return(new JsonDeserializationResult(inlineCount, values)); } }