public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var j = JObject.Load(reader); if (j == null || !j.HasValues) return null; IGeoDistanceRangeFilter filter = new GeoDistanceRangeFilterDescriptor(); foreach (var jv in j) { switch (jv.Key) { case "include_lower": filter.IncludeLower = jv.Value.Value<bool>(); break; case "include_upper": filter.IncludeUpper = jv.Value.Value<bool>(); break; case "from": if (jv.Value.Type == JTokenType.String) filter.From = jv.Value.Value<string>(); else filter.From = jv.Value.Value<double>(); break; case "to": filter.To = jv.Value.Value<object>(); break; case "distance_type": filter.DistanceType = jv.Value.Value<string>().ToEnum<GeoDistance>(); break; case "optimize_bbox": filter.OptimizeBoundingBox = jv.Value.Value<string>().ToEnum<GeoOptimizeBBox>(); break; case "unit": filter.Unit = jv.Value.Value<string>().ToEnum<GeoUnit>(); break; case "_cache": filter.Cache = jv.Value.Value<bool>(); break; case "_cache_key": filter.CacheKey = jv.Value.Value<string>(); break; case "_name": filter.FilterName = jv.Value.Value<string>(); break; default: filter.Field = jv.Key; filter.Location = jv.Value.Value<string>(); break; } } return filter; }
private FilterContainer _GeoDistanceRange(PropertyPathMarker field, Action <GeoDistanceRangeFilterDescriptor> filterDescriptor) { var filter = new GeoDistanceRangeFilterDescriptor(); if (filterDescriptor != null) { filterDescriptor(filter); } IGeoDistanceRangeFilter ff = filter; ff.Field = field; return(this.New(ff, f => f.GeoDistanceRange = ff)); }