public void PASS_Create()
        {
            MappingCharacterFilter filter = new MappingCharacterFilter("name",
                new List<CharacterMapping>() 
                { 
                    new CharacterMapping("ph", "f"),
                    new CharacterMapping("qu", "q")
                });

            Assert.IsNotNull(filter);
            Assert.AreEqual("name", filter.Name);
            Assert.AreEqual("ph=>f", filter.Mappings.First().ToString());
            Assert.AreEqual("qu=>q", filter.Mappings.Last().ToString());
        }
        public void PASS_Serialize()
        {
            MappingCharacterFilter filter = new MappingCharacterFilter("name",
                new List<CharacterMapping>() 
                { 
                    new CharacterMapping("ph", "f"),
                    new CharacterMapping("qu", "q")
                });

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

            string expectedJson = "{\"name\":{\"type\":\"mapping\",\"mappings\":[\"ph=>f\",\"qu=>q\"]}}";
            Assert.AreEqual(expectedJson, json);
        }
        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;

            MappingCharacterFilter filter = null;
            if (fieldDict.ContainsKey(_MAPPINGS))
            { 
                filter = new MappingCharacterFilter(filterName, JsonConvert.DeserializeObject<IEnumerable<CharacterMapping>>(fieldDict.GetString(_MAPPINGS)));
            }
            else if(fieldDict.ContainsKey(_MAPPINGS_PATH))
            {
                filter = new MappingCharacterFilter(filterName, fieldDict.GetString(_MAPPINGS_PATH));
            }
            else
            {
                throw new RequiredPropertyMissingException(_MAPPINGS + "/" + _MAPPINGS_PATH);
            }

            CharacterFilterBase.Deserialize(filter, fieldDict);

            return filter;
        }