/// <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); }
/// <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)); }
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); }