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;

		}
Ejemplo n.º 2
0
        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 = Enum.Parse(typeof(GeoDistanceType), jv.Value.Value <string>()) as GeoDistanceType?;
                    break;

                case "optimize_bbox":
                    filter.OptimizeBoundingBox = Enum.Parse(typeof(GeoOptimizeBBox), jv.Value.Value <string>()) as GeoOptimizeBBox?;
                    break;

                case "unit":
                    filter.Unit = Enum.Parse(typeof(GeoUnit), jv.Value.Value <string>()) as 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);
        }