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> termDict = JsonConvert.DeserializeObject<Dictionary<string, object>>(facetDict.GetString(FacetTypeEnum.TermsStatistics.ToString()));

            string facetName = wholeDict.First().Key;
            string keyField = termDict.GetString(_KEY_FIELD);
            string valueField = termDict.GetStringOrDefault(_VALUE_FIELD);

            TermsStatisticsFacet facet = null;
            if (!string.IsNullOrWhiteSpace(valueField))
            {
                facet = new TermsStatisticsFacet(facetName, keyField, valueField);
            }
            else
            {
                facet = new TermsStatisticsFacet(facetName, keyField, termDict.DeserializeObject<Script>(new Dictionary<string,string>(){ {_VALUE_SCRIPT, Script.SCRIPT} }));
            }

            FacetSerializer.DeserializeFacetInfo(facet, termDict);
            facet.ShardSize = termDict.GetInt32(_SHARD_SIZE, facet.Size);
            OrderOptionEnum order = OrderOptionEnum.Count;
            facet.Order = OrderOptionEnum.Find(termDict.GetString(_ORDER, TermsStatisticsFacet._ORDER_DEFAULT.ToString()));

            return facet;
        }
 public void PASS_Create()
 {
     TermsStatisticsFacet facet = new TermsStatisticsFacet("name", "keyfield", "valuefield");
     Assert.IsNotNull(facet);
     Assert.AreEqual("name", facet.FacetName);
     Assert.AreEqual("keyfield", facet.KeyField);
     Assert.AreEqual("valuefield", facet.ValueField);
 }
        public void PASS_Serialize()
        {
            TermsStatisticsFacet facet = new TermsStatisticsFacet("name", "keyfield", "valuefield");
            string json = JsonConvert.SerializeObject(facet);
            Assert.IsNotNull(json);

            string expectedJson = "{\"name\":{\"terms_stats\":{\"key_field\":\"keyfield\",\"value_field\":\"valuefield\"}}}";
            Assert.AreEqual(expectedJson, json);
        }