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());

            ShingleTokenFilter filter = new ShingleTokenFilter(filterDict.First().Key);
            TokenFilterBase.Deserialize(filter, fieldDict);
            filter.MinimumSize = fieldDict.GetInt64(_MINIMUM_SHINGLE_SIZE, ShingleTokenFilter._MINIMUM_SIZE_DEFAULT);
            filter.MaximumSize = fieldDict.GetInt64(_MAXIMUM_SHINGLE_SIZE, ShingleTokenFilter._MAXIMUM_SIZE_DEFAULT);
            filter.OutputUnigrams = fieldDict.GetBool(_OUTPUT_UNIGRAMS, ShingleTokenFilter._OUTPUT_UNIGRAMS_DEFAULT);
            filter.OutputUnigramsIfNoShingles = fieldDict.GetBool(_OUTPUT_UNIGRAMS_IF_NO_SHINGLES, ShingleTokenFilter._OUTPUT_UNIGRAMS_IF_NO_SHINGLES_DEFAULT);
            filter.TokenSeparator = fieldDict.GetString(_TOKEN_SEPARATOR, ShingleTokenFilter._TOKEN_SEPARATOR_DEFAULT);
            filter.FillerToken = fieldDict.GetString(_FILLER_TOKEN, ShingleTokenFilter._FILLER_TOKEN_DEFAULT);

            return filter;
        }
        public void PASS_Serialize()
        {
            ShingleTokenFilter filter = new ShingleTokenFilter("name")
            {
                Version = 2.4,
                FillerToken = "a",
                MaximumSize = 25,
                MinimumSize = 4,
                OutputUnigrams = false,
                OutputUnigramsIfNoShingles = true,
                TokenSeparator = "-"
            };

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

            string expectedJson = "{\"name\":{\"type\":\"shingle\",\"version\":2.4,\"min_shingle_size\":4,\"max_shingle_size\":25,\"output_unigrams\":false,\"output_unigrams_if_no_shingles\":true,\"token_separator\":\"-\",\"filler_token\":\"a\"}}";
            Assert.AreEqual(expectedJson, json);
        }
        public void PASS_Create()
        {
            ShingleTokenFilter filter = new ShingleTokenFilter("name")
            {
                Version = 2.4,
                FillerToken = "a",
                MaximumSize = 25,
                MinimumSize = 4,
                OutputUnigrams = false,
                OutputUnigramsIfNoShingles = true,
                TokenSeparator = "-"
            };

            Assert.IsNotNull(filter);
            Assert.AreEqual("name", filter.Name);
            Assert.AreEqual(2.4, filter.Version);
            Assert.AreEqual("a", filter.FillerToken);
            Assert.AreEqual(25, filter.MaximumSize);
            Assert.AreEqual(4, filter.MinimumSize);
            Assert.AreEqual(false, filter.OutputUnigrams);
            Assert.AreEqual(true, filter.OutputUnigramsIfNoShingles);
            Assert.AreEqual("-", filter.TokenSeparator);
        }