private void ReadTerms(ref JsonReader reader, ITermsQuery termsQuery, IJsonFormatterResolver formatterResolver) { var token = reader.GetCurrentJsonToken(); if (token == JsonToken.BeginObject) { var fieldLookup = new FieldLookup(); var count = 0; while (reader.ReadIsInObject(ref count)) { var property = reader.ReadPropertyNameSegmentRaw(); if (FieldLookups.TryGetValue(property, out var value)) { switch (value) { case 0: fieldLookup.Id = formatterResolver.GetFormatter <Id>() .Deserialize(ref reader, formatterResolver); break; case 1: fieldLookup.Index = formatterResolver.GetFormatter <IndexName>() .Deserialize(ref reader, formatterResolver); break; case 2: fieldLookup.Path = formatterResolver.GetFormatter <Field>() .Deserialize(ref reader, formatterResolver); break; case 3: fieldLookup.Routing = formatterResolver.GetFormatter <Routing>() .Deserialize(ref reader, formatterResolver); break; } } } termsQuery.TermsLookup = fieldLookup; } else if (token == JsonToken.BeginArray) { var values = formatterResolver.GetFormatter <IEnumerable <object> >() .Deserialize(ref reader, formatterResolver); termsQuery.Terms = values; } }
private void ReadTerms(ITermsQuery termsQuery, JsonReader reader, JsonSerializer serializer) { reader.Read(); if (reader.TokenType == JsonToken.StartObject) { var ef = new FieldLookup(); var depth = reader.Depth; while (reader.Read() && reader.Depth >= depth && reader.Value != null) { var property = reader.Value as string; switch (property) { case "id": reader.Read(); var id = serializer.Deserialize <Id>(reader); ef.Id = id; break; case "index": reader.Read(); ef.Index = reader.Value as string; break; case "type": reader.Read(); ef.Type = reader.Value as string; break; case "path": reader.Read(); ef.Path = reader.Value as string; break; case "routing": reader.Read(); ef.Routing = reader.Value as string; break; } } termsQuery.TermsLookup = ef; } else if (reader.TokenType == JsonToken.StartArray) { var values = JArray.Load(reader).Values <object>(); termsQuery.Terms = values; } }