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

            LimitTokenCountTokenFilter filter = new LimitTokenCountTokenFilter(filterDict.First().Key);
            TokenFilterBase.Deserialize(filter, fieldDict);

            filter.MaximumTokenCount = fieldDict.GetInt32(_MAXIMUM_TOKEN_COUNT, LimitTokenCountTokenFilter._MAXIMUM_TOKEN_COUNT_DEFAULT);
            filter.ConsumeAllTokens = fieldDict.GetBool(_CONSUME_ALL_TOKENS, LimitTokenCountTokenFilter._CONSUME_ALL_TOKENS_DEFAULT);

            return filter;
        }
        public void PASS_Serialize()
        {
            LimitTokenCountTokenFilter filter = new LimitTokenCountTokenFilter("name")
            {
                Version = 2.4,
                MaximumTokenCount = 2,
                ConsumeAllTokens = true
            };

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

            string expectedJson = "{\"name\":{\"type\":\"limit\",\"version\":2.4,\"max_token_count\":2,\"consume_all_tokens\":true}}";
            Assert.AreEqual(expectedJson, json);
        }
        public void PASS_Create()
        {
            LimitTokenCountTokenFilter filter = new LimitTokenCountTokenFilter("name")
            {
                Version = 2.4,
                MaximumTokenCount = 2,
                ConsumeAllTokens = true
            };

            Assert.IsNotNull(filter);
            Assert.AreEqual("name", filter.Name);
            Assert.AreEqual(2.4, filter.Version);
            Assert.AreEqual((int)2, filter.MaximumTokenCount);
            Assert.AreEqual(true, filter.ConsumeAllTokens);
        }