public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            Dictionary<string, object> filterDict = serializer.Deserialize<Dictionary<string, object>>(reader);
            Dictionary<string, object> fieldDict = JsonConvert.DeserializeObject<Dictionary<string, object>>(filterDict.First().Value.ToString());
            string filterName = filterDict.First().Key;
            
            KeepWordsTokenFilter filter = null;

            if (fieldDict.ContainsKey(_KEEP_WORDS))
            {
                filter = new KeepWordsTokenFilter(filterName, JsonConvert.DeserializeObject<IEnumerable<string>>(fieldDict.GetString(_KEEP_WORDS)));
            }
            else if (fieldDict.ContainsKey(_KEEP_WORDS_PATH))
            {
                filter = new KeepWordsTokenFilter(filterName, fieldDict.GetString(_KEEP_WORDS_PATH));
            }
            else
            {
                throw new RequiredPropertyMissingException(_KEEP_WORDS + "/" + _KEEP_WORDS_PATH);
            }

            TokenFilterBase.Deserialize(filter, fieldDict);

            filter.Lowercase = fieldDict.GetBool(_KEEP_WORDS_CASE, KeepWordsTokenFilter._LOWERCASE_DEFAULT);

            return filter;
        }
 public void PASS_Create()
 {
     KeepWordsTokenFilter filter = new KeepWordsTokenFilter("name", "path") 
     { 
         Lowercase = true
     };
     Assert.IsNotNull(filter);
     Assert.AreEqual("name", filter.Name);
     Assert.AreEqual("path", filter.KeepWordsPath);
     Assert.AreEqual(true, filter.Lowercase);
 }
        public void PASS_Serialize()
        {
            KeepWordsTokenFilter filter = new KeepWordsTokenFilter("name", "path")
            {
                Lowercase = true
            };

            string json = JsonConvert.SerializeObject(filter);
            Assert.IsNotNull(json);

            string expectedJson = "{\"name\":{\"type\":\"keep\",\"keep_words_case\":true,\"keep_words_path\":\"path\"}}";
            Assert.AreEqual(expectedJson, json);
        }