private void ReadBox(IGeoBoundingBoxFilter filter, JsonReader reader) { reader.Read(); if (reader.TokenType != JsonToken.StartObject) { return; } reader.Read(); var firstProperty = reader.Value as string; if (firstProperty == "top_left") { reader.Read(); if (reader.ValueType == typeof(string)) { filter.TopLeft = reader.Value as string; reader.Read(); reader.Read(); filter.BottomRight = reader.Value as string; } else if (reader.TokenType == JsonToken.StartArray) { var values = JArray.Load(reader).Values <double>(); filter.TopLeft = string.Join(", ", values); reader.Read(); reader.Read(); values = JArray.Load(reader).Values <double>(); filter.BottomRight = string.Join(", ", values); } else if (reader.TokenType == JsonToken.StartObject) { var latlon = JObject.Load(reader).ToObject <LatLon>(); filter.TopLeft = "{0}, {1}".F(latlon.Lon, latlon.Lat); reader.Read(); reader.Read(); latlon = JObject.Load(reader).ToObject <LatLon>(); filter.BottomRight = "{0}, {1}".F(latlon.Lon, latlon.Lat); } } //vertices else if (firstProperty == "top") { reader.Read(); var top = reader.Value as double?; reader.Read(); reader.Read(); var left = reader.Value as double?; reader.Read(); reader.Read(); var bottom = reader.Value as double?; reader.Read(); reader.Read(); var right = reader.Value as double?; filter.TopLeft = "{0}, {1}".F(top, left); filter.BottomRight = "{0}, {1}".F(bottom, right); } reader.Read(); }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var filter = new GeoBoundingBoxFilterDescriptor(); IGeoBoundingBoxFilter f = filter; if (reader.TokenType != JsonToken.StartObject) { return(null); } var depth = reader.Depth; while (reader.Read() && reader.Depth >= depth && reader.Value != null) { var property = reader.Value as string; switch (property) { case "_cache": reader.Read(); f.Cache = reader.Value as bool?; break; case "_name": reader.Read(); f.FilterName = reader.Value as string; break; case "_cache_key": reader.Read(); f.CacheKey = reader.Value as string; break; case "type": reader.Read(); f.GeoExecution = (reader.Value as string).ToEnum <GeoExecution>(); break; default: f.Field = property; ReadBox(f, reader); break; } } return(filter); }
public virtual void Visit(IGeoBoundingBoxFilter filter) { Write("geo_bounding_box"); }
public virtual void Visit(IGeoBoundingBoxFilter customFiltersScore) { }
private void ReadBox(IGeoBoundingBoxFilter filter, JsonReader reader) { var c = CultureInfo.InvariantCulture; reader.Read(); if (reader.TokenType != JsonToken.StartObject) return; reader.Read(); var firstProperty = reader.Value as string; if (firstProperty == "top_left") { reader.Read(); if (reader.ValueType == typeof(string)) { filter.TopLeft = reader.Value as string; reader.Read(); reader.Read(); filter.BottomRight = reader.Value as string; } else if (reader.TokenType == JsonToken.StartArray) { var values = JArray.Load(reader).Values<double>(); filter.TopLeft = string.Join(", ", values.Select(v=>v.ToString(c))); reader.Read(); reader.Read(); values = JArray.Load(reader).Values<double>(); filter.BottomRight =string.Join(", ", values.Select(v=>v.ToString(c))); } else if (reader.TokenType == JsonToken.StartObject) { var latlon = JObject.Load(reader).ToObject<LatLon>(); filter.TopLeft = "{0}, {1}".F(latlon.Lon, latlon.Lat); reader.Read(); reader.Read(); latlon = JObject.Load(reader).ToObject<LatLon>(); filter.BottomRight = "{0}, {1}".F(latlon.Lon, latlon.Lat); } } //vertices else if (firstProperty == "top") { reader.Read(); var top = reader.Value as double?; reader.Read(); reader.Read(); var left = reader.Value as double?; reader.Read(); reader.Read(); var bottom = reader.Value as double?; reader.Read(); reader.Read(); var right = reader.Value as double?; filter.TopLeft = "{0}, {1}".F(top, left); filter.BottomRight = "{0}, {1}".F(bottom, right); } reader.Read(); }