private IFacetItem GetFacetItem(string root, IEnumerable <IFacetParameter <TDocument> > facetParameters) { var initialPath = this._jsonReader.Path; var facetName = (string)this._jsonReader.Value; var facetParameter = GetFacetParameter(facetParameters, facetName); IFacetItem facetItem; this._jsonReader.Read(); // Closes property this._jsonReader.Read(); // Go to checker element // Facet query if ((string)this._jsonReader.Value == "count") { facetItem = new FacetItemQuery(facetName, (long)this._jsonReader.ReadAsInt32()); this._jsonReader.Read();// Closes count property // Subfacets if (this._jsonReader.TokenType != JsonToken.EndObject) { this.GetFacetItems( initialPath, facetParameter.Facets.ToList(), out var facetItems); ((FacetItemQuery)facetItem).Facets = facetItems; } } else // Facet field or facet range { var facetRangeParameter = facetParameter as IFacetRangeParameter <TDocument>; this._jsonReader.Read();// Closes buckets property if (facetRangeParameter != null) { var fieldType = facetRangeParameter .ExpressionBuilder .GetPropertyType(facetRangeParameter.FieldExpression); facetItem = new FacetItemRange(facetName); this.ProcessFacetRangeBuckets(root, facetRangeParameter, facetName, facetItem, fieldType); } else { facetItem = new FacetItemField(facetName); this.ProcessFacetFieldBuckets(root, facetParameter, facetName, facetItem); } } // Closes facet item object while (!this._jsonReader.Path.Equals($"{root}.{facetName}") && this._jsonReader.TokenType != JsonToken.EndObject) { this._jsonReader.Read(); } return(facetItem); }
/// <summary> /// Execute processing facet queries /// </summary> private static IEnumerable <FacetItemQuery> ProcessFacetQueries(JsonReader jsonReader) { var facetItemQueries = new List <FacetItemQuery>(); jsonReader.Read(); // Start object jsonReader.Read(); // Start property name while (jsonReader.TokenType != JsonToken.EndObject) { var facetItem = new FacetItemQuery( (string)jsonReader.Value, (long)jsonReader.ReadAsInt32()); facetItemQueries.Add(facetItem); jsonReader.Read(); } return(facetItemQueries.ToArray()); }