public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { Dictionary<string, object> wholeDict = serializer.Deserialize<Dictionary<string, object>>(reader); Dictionary<string, object> facetDict = JsonConvert.DeserializeObject<Dictionary<string, object>>(wholeDict.First().Value.ToString()); Dictionary<string, object> histoDict = JsonConvert.DeserializeObject<Dictionary<string, object>>(facetDict.GetString(AggregationTypeEnum.DateHistogram.ToString())); DateHistogramAggregate agg = null; string aggName = wholeDict.First().Key; string field = histoDict.GetStringOrDefault(_FIELD); Script script = histoDict.DeserializeObject<Script>(); DateIntervalEnum intervalType = DateIntervalEnum.Day; string intervalValue = histoDict.GetString(_INTERVAL); intervalType = DateIntervalEnum.Find(intervalValue); if (intervalType != null) { if (!string.IsNullOrWhiteSpace(field) && script != null) agg = new DateHistogramAggregate(aggName, field, script, intervalType); else if (!string.IsNullOrWhiteSpace(field)) agg = new DateHistogramAggregate(aggName, field, intervalType); else if(script != null) agg = new DateHistogramAggregate(aggName, script, intervalType); } else { TimeValue timeValue = new TimeValue(intervalValue); if (!string.IsNullOrWhiteSpace(field) && script != null) agg = new DateHistogramAggregate(aggName, field, script, timeValue); else if (!string.IsNullOrWhiteSpace(field)) agg = new DateHistogramAggregate(aggName, field, timeValue); else if(script != null) agg = new DateHistogramAggregate(aggName, script, timeValue); } if (agg == null) throw new RequiredPropertyMissingException(_FIELD + "/" + Script.SCRIPT); if (histoDict.ContainsKey(_POST_OFFSET)) agg.PostOffset = JsonConvert.DeserializeObject<TimeValue>(histoDict.GetString(_POST_OFFSET)); if (histoDict.ContainsKey(_PRE_OFFSET)) agg.PreOffset = JsonConvert.DeserializeObject<TimeValue>(histoDict.GetString(_PRE_OFFSET)); agg.PostZone = histoDict.GetTimeSpan(_POST_ZONE, _TIMESPAN_DEFAULT); agg.PreZone = histoDict.GetTimeSpan(_PRE_ZONE, _TIMESPAN_DEFAULT); agg.PreZoneAdjustLargeInterval = histoDict.GetBool(_PRE_ZONE_ADJUST_LARGE_INTERVAL, _PRE_ZONE_ADJUST_LARGE_INTERVAL_DEFAULT); agg.TimeZone = histoDict.GetTimeSpan(_TIME_ZONE, _TIMESPAN_DEFAULT); agg.MinimumDocumentCount = histoDict.GetInt32(_MINIMUM_DOCUMENT_COUNT, _MINIMUM_DOCUMENT_COUNT_DEFAULT); if (histoDict.ContainsKey(_ORDER)) { Dictionary<string, object> orderDict = JsonConvert.DeserializeObject<Dictionary<string, object>>(histoDict.GetString(_ORDER)); if (orderDict.Count != 1) throw new Exception("The order parameter must be a dictionary of one key value pair."); agg.SortValue = orderDict.First().Key; agg.SortOrder = SortOrderEnum.Find(orderDict.First().Value.ToString()); } return agg; }
public void PASS_Create() { DateHistogramAggregate agg = new DateHistogramAggregate("name", "field", DateIntervalEnum.Day); Assert.IsNotNull(agg); Assert.AreEqual("name", agg.Name); Assert.AreEqual("field", agg.Field); Assert.AreEqual(DateIntervalEnum.Day, agg.ConstantInterval); }
public void PASS_Serialize() { DateHistogramAggregate agg = new DateHistogramAggregate("name", "field", DateIntervalEnum.Day); string json = JsonConvert.SerializeObject(agg); Assert.IsNotNull(json); string expectedJson = "{\"name\":{\"date_histogram\":{\"field\":\"field\",\"interval\":\"day\"}}}"; Assert.AreEqual(expectedJson, json); }