Пример #1
0
 Task <IODataDeserializationResult> IODataClientQueryPipeline.DeserializeAsync(IODataTranslationResult translation, System.IO.Stream response)
 {
     return(this._pipeline.DeserializeAsync(translation, response));
 }
Пример #2
0
        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));
            }
        }