Exemple #1
0
        /// <summary>
        /// Read the @search.facets property value.
        /// </summary>
        /// <param name="reader">The JSON reader.</param>
        /// <param name="results">The SearchResults to add the facets to.</param>
        /// <param name="options">JSON serializer options.</param>
        private static void ReadFacets(
            ref Utf8JsonReader reader,
            SearchResults <T> results,
            JsonSerializerOptions options)
        {
            Debug.Assert(results != null);

            // Facets are optional, so short circuit if nothing is found
            if (reader.TokenType == JsonTokenType.Null)
            {
                return;
            }

            results.Facets = new Dictionary <string, IList <FacetResult> >();
            reader.Expects(JsonTokenType.StartObject);
            while (reader.Read() && reader.TokenType != JsonTokenType.EndObject)
            {
                // Get the name of the facet
                string facetName = reader.ExpectsPropertyName();

                // Get the values of the facet
                List <FacetResult> facets = new List <FacetResult>();
                reader.Expects(JsonTokenType.StartArray);
                while (reader.Read() && reader.TokenType != JsonTokenType.EndArray)
                {
                    FacetResult facet = ReadFacetResult(ref reader, options);
                    facets.Add(facet);
                }

                // Add the facet to the results
                results.Facets[facetName] = facets;
            }
        }
        internal static SearchDocumentsResult DeserializeSearchDocumentsResult(JsonElement element)
        {
            Optional <long>   odataCount     = default;
            Optional <double> searchCoverage = default;
            Optional <IReadOnlyDictionary <string, IList <FacetResult> > > searchFacets = default;
            Optional <SearchOptions>     searchNextPageParameters = default;
            IReadOnlyList <SearchResult> value         = default;
            Optional <string>            odataNextLink = default;

            foreach (var property in element.EnumerateObject())
            {
                if (property.NameEquals("@odata.count"))
                {
                    odataCount = property.Value.GetInt64();
                    continue;
                }
                if (property.NameEquals("@search.coverage"))
                {
                    searchCoverage = property.Value.GetDouble();
                    continue;
                }
                if (property.NameEquals("@search.facets"))
                {
                    Dictionary <string, IList <FacetResult> > dictionary = new Dictionary <string, IList <FacetResult> >();
                    foreach (var property0 in property.Value.EnumerateObject())
                    {
                        List <FacetResult> array = new List <FacetResult>();
                        foreach (var item in property0.Value.EnumerateArray())
                        {
                            array.Add(FacetResult.DeserializeFacetResult(item));
                        }
                        dictionary.Add(property0.Name, array);
                    }
                    searchFacets = dictionary;
                    continue;
                }
                if (property.NameEquals("@search.nextPageParameters"))
                {
                    searchNextPageParameters = SearchOptions.DeserializeSearchOptions(property.Value);
                    continue;
                }
                if (property.NameEquals("value"))
                {
                    List <SearchResult> array = new List <SearchResult>();
                    foreach (var item in property.Value.EnumerateArray())
                    {
                        array.Add(SearchResult.DeserializeSearchResult(item));
                    }
                    value = array;
                    continue;
                }
                if (property.NameEquals("@odata.nextLink"))
                {
                    odataNextLink = property.Value.GetString();
                    continue;
                }
            }
            return(new SearchDocumentsResult(Optional.ToNullable(odataCount), Optional.ToNullable(searchCoverage), Optional.ToDictionary(searchFacets), searchNextPageParameters.Value, value, odataNextLink.Value));
        }
        internal static FacetResult DeserializeFacetResult(JsonElement element)
        {
            FacetResult result = new FacetResult();

            foreach (var property in element.EnumerateObject())
            {
                if (property.NameEquals("count"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        continue;
                    }
                    result.Count = property.Value.GetInt64();
                    continue;
                }
                result.Add(property.Name, property.Value.GetObject());
            }
            return(result);
        }
Exemple #4
0
        /// <summary>
        /// Read the facet result value.
        /// </summary>
        /// <param name="reader">JSON reader.</param>
        /// <param name="options">Serializer options.</param>
        /// <returns>The facet result.</returns>
        private static FacetResult ReadFacetResult(
            ref Utf8JsonReader reader,
            JsonSerializerOptions options)
        {
            FacetResult facet = new FacetResult();

            reader.Expects(JsonTokenType.StartObject);
            while (reader.Read() && reader.TokenType != JsonTokenType.EndObject)
            {
                // Get the name of the facet property
                string facetName = reader.ExpectsPropertyName();
                if (facetName == Constants.CountKey)
                {
                    facet.Count = reader.ExpectsNullableLong();
                }
                else
                {
                    object value = reader.ReadObject(options);
                    facet[facetName] = value;
                }
            }
            return(facet);
        }
        internal static SearchDocumentsResult DeserializeSearchDocumentsResult(JsonElement element)
        {
            long?  odataCount     = default;
            double?searchCoverage = default;
            IReadOnlyDictionary <string, IList <FacetResult> > searchFacets = default;
            SearchOptions searchNextPageParameters = default;
            IReadOnlyList <SearchResult> value     = default;
            string odataNextLink = default;

            foreach (var property in element.EnumerateObject())
            {
                if (property.NameEquals("@odata.count"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        continue;
                    }
                    odataCount = property.Value.GetInt64();
                    continue;
                }
                if (property.NameEquals("@search.coverage"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        continue;
                    }
                    searchCoverage = property.Value.GetDouble();
                    continue;
                }
                if (property.NameEquals("@search.facets"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        continue;
                    }
                    Dictionary <string, IList <FacetResult> > dictionary = new Dictionary <string, IList <FacetResult> >();
                    foreach (var property0 in property.Value.EnumerateObject())
                    {
                        if (property0.Value.ValueKind == JsonValueKind.Null)
                        {
                            dictionary.Add(property0.Name, null);
                        }
                        else
                        {
                            List <FacetResult> array = new List <FacetResult>();
                            foreach (var item in property0.Value.EnumerateArray())
                            {
                                if (item.ValueKind == JsonValueKind.Null)
                                {
                                    array.Add(null);
                                }
                                else
                                {
                                    array.Add(FacetResult.DeserializeFacetResult(item));
                                }
                            }
                            dictionary.Add(property0.Name, array);
                        }
                    }
                    searchFacets = dictionary;
                    continue;
                }
                if (property.NameEquals("@search.nextPageParameters"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        continue;
                    }
                    searchNextPageParameters = SearchOptions.DeserializeSearchOptions(property.Value);
                    continue;
                }
                if (property.NameEquals("value"))
                {
                    List <SearchResult> array = new List <SearchResult>();
                    foreach (var item in property.Value.EnumerateArray())
                    {
                        if (item.ValueKind == JsonValueKind.Null)
                        {
                            array.Add(null);
                        }
                        else
                        {
                            array.Add(SearchResult.DeserializeSearchResult(item));
                        }
                    }
                    value = array;
                    continue;
                }
                if (property.NameEquals("@odata.nextLink"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        continue;
                    }
                    odataNextLink = property.Value.GetString();
                    continue;
                }
            }
            return(new SearchDocumentsResult(odataCount, searchCoverage, searchFacets, searchNextPageParameters, value, odataNextLink));
        }
Exemple #6
0
        internal static SearchDocumentsResult DeserializeSearchDocumentsResult(JsonElement element)
        {
            SearchDocumentsResult result = new SearchDocumentsResult();

            foreach (var property in element.EnumerateObject())
            {
                if (property.NameEquals("@odata.count"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        continue;
                    }
                    result.Count = property.Value.GetInt64();
                    continue;
                }
                if (property.NameEquals("@search.coverage"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        continue;
                    }
                    result.Coverage = property.Value.GetDouble();
                    continue;
                }
                if (property.NameEquals("@search.facets"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        continue;
                    }
                    result.Facets = new Dictionary <string, IList <FacetResult> >();
                    foreach (var property0 in property.Value.EnumerateObject())
                    {
                        IList <FacetResult> value = new List <FacetResult>();
                        foreach (var item in property0.Value.EnumerateArray())
                        {
                            value.Add(FacetResult.DeserializeFacetResult(item));
                        }
                        result.Facets.Add(property0.Name, value);
                    }
                    continue;
                }
                if (property.NameEquals("@search.nextPageParameters"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        continue;
                    }
                    result.NextPageParameters = SearchOptions.DeserializeSearchOptions(property.Value);
                    continue;
                }
                if (property.NameEquals("value"))
                {
                    foreach (var item in property.Value.EnumerateArray())
                    {
                        result.Results.Add(SearchResult.DeserializeSearchResult(item));
                    }
                    continue;
                }
                if (property.NameEquals("@odata.nextLink"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        continue;
                    }
                    result.NextLink = property.Value.GetString();
                    continue;
                }
            }
            return(result);
        }