public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            Dictionary<string, object> propDict = serializer.Deserialize<Dictionary<string, object>>(reader);
            string name = propDict.First().Key;
            StringProperty property = new StringProperty(name);

            Dictionary<string, object> fieldDict = JsonConvert.DeserializeObject<Dictionary<string, object>>(propDict.First().Value.ToString());
            FieldProperty.Deserialize(property, fieldDict);

            property.Analyzer = PropertyAnalyzer.Deserialize(fieldDict);
            property.DocValues = fieldDict.GetBool(_DOC_VALUES, StringProperty._DOC_VALUES_DEFAULT);
            if (property.IsAnalyzed)
            {
                property.IndexOptions = IndexOptionEnum.Find(fieldDict.GetString(_INDEX_OPTIONS, StringProperty._INDEX_OPTION_ANALYZED_DEFAULT.ToString()));
                property.Norms = Norms.Deserialize(fieldDict);
                property.OmitNorms = fieldDict.GetBool(_OMIT_NORMS, StringProperty._OMIT_NORMS_ANALYZED_DEFAULT);
            }
            else
            {
                property.IndexOptions = IndexOptionEnum.Find(fieldDict.GetString(_INDEX_OPTIONS, StringProperty._INDEX_OPTION_NOT_ANALYZED_DEFAULT.ToString()));
                property.Norms = Norms.Deserialize(fieldDict, false);
                property.OmitNorms = fieldDict.GetBool(_OMIT_NORMS, StringProperty._OMIT_NORMS_NOT_ANALYZED_DEFAULT);
            }

            property.IgnoreAbove = fieldDict.GetInt64OrNull(_IGNORE_ABOVE);
            property.PositionOffsetGap = fieldDict.GetInt64(_POSITION_GAP_OFFSET, StringProperty._POSITION_OFFSET_GAP_DEFAULT);
            property.TermVector = TermVectorEnum.Find(fieldDict.GetString(_TERM_VECTOR, StringProperty._TERM_VECTOR_DEFAULT.ToString()));

            return property;
        }
        public void PASS_Serialize()
        {
            StringProperty prop = new StringProperty("name")
            {
                Analyzer = new PropertyAnalyzer(new StandardAnalyzer("standard"), new StandardAnalyzer("standard"))
            };

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

            string expectedJson = "{\"name\":{\"type\":\"string\",\"index_analyzer\":\"standard\",\"search_analyzer\":\"standard\"}}";
            Assert.AreEqual(expectedJson, json);
        }
        public void PASS_Create()
        {
            StringProperty prop = new StringProperty("name")
            {
                Analyzer = new PropertyAnalyzer(new StandardAnalyzer("standard"), new StandardAnalyzer("standard"))
            };

            Assert.IsNotNull(prop);
            Assert.AreEqual(IndexSettingEnum.Analyzed, prop.Index);
            Assert.AreEqual("name", prop.Name);
            Assert.AreEqual("name", prop.IndexName);
            Assert.AreEqual("standard", prop.Analyzer.IndexAnalyzer.Name);
            Assert.AreEqual("standard", prop.Analyzer.SearchAnalyzer.Name);
        }