Пример #1
0
        internal static void Deserialize(FieldProperty field, Dictionary<string, object> fieldDict)
        {
            MappingBase.Deserialize(field, fieldDict);
            field.IncludeInAll = fieldDict.GetBool(_INCLUDE_IN_ALL, _INCLUDE_IN_ALL_DEFAULT);
            field.Boost = fieldDict.GetDouble(_BOOST, _BOOST_DEFAULT);

            if (fieldDict.ContainsKey(_COPY_TO))
            {
                try 
                {
                    field.CopyTo = JsonConvert.DeserializeObject<IEnumerable<string>>(fieldDict.GetString(_COPY_TO));
                }
                catch
                {
                    field.CopyTo = new List<string>(){ fieldDict.GetString(_COPY_TO) };
                }
            }

            field.DocValuesFormat = DocValuesFormatEnum.Find(fieldDict.GetString(_DOC_VALUES_FORMAT, _DOC_VALUES_FORMAT_DEFAULT.ToString()));

            if(fieldDict.ContainsKey(_FIELD_DATA))
            {
                field.FieldData = FieldDataFilter.Deserialize(JsonConvert.DeserializeObject<Dictionary<string, object>>(fieldDict.GetString(_FIELD_DATA)));
            }
            
            if(fieldDict.ContainsKey(_FIELDS))
            {
                field.Fields = JsonConvert.DeserializeObject<DocumentPropertyCollection>(fieldDict.GetString(_FIELDS));
            }

            field.IndexName = fieldDict.GetString(_INDEX_NAME, field.Name);
            if(fieldDict.ContainsKey(_NULL_VALUE))
                field.NullValue = fieldDict[_NULL_VALUE];

            field.PostingsFormat = PostingFormatEnum.Find(fieldDict.GetString(_POSTINGS_FORMAT, _POSTINGS_FORMAT_DEFAULT.ToString()));
            field.Similarity = SimilarityAlgorithmEnum.Find(fieldDict.GetString(_SIMILARITY, _SIMILARITY_DEFAULT.ToString()));
        }
Пример #2
0
        internal static void Serialize(FieldProperty field, Dictionary<string, object> fieldDict)
        {
            if (field == null)
                return;

            if (fieldDict == null)
                fieldDict = new Dictionary<string, object>();

            fieldDict.AddObject(_TYPE, field.PropertyType.ToString(), _PROPERTY_TYPE_DEFAULT.ToString());
            MappingBase.Serialize(field, fieldDict);
            fieldDict.AddObject(_INCLUDE_IN_ALL, field.IncludeInAll, _INCLUDE_IN_ALL_DEFAULT);
            fieldDict.AddObject(_BOOST, field.Boost, _BOOST_DEFAULT);
            fieldDict.AddObject(_INDEX_NAME, field.IndexName, field.Name);
            fieldDict.AddObject(_POSTINGS_FORMAT, field.PostingsFormat.ToString(), _POSTINGS_FORMAT_DEFAULT.ToString());
            if (field.FieldData != null)
                fieldDict.AddObject(_FIELD_DATA, field.FieldData.Serialize());
            fieldDict.AddObject(_SIMILARITY, field.Similarity.ToString(), _SIMILARITY_DEFAULT.ToString());
            fieldDict.AddObject(_DOC_VALUES_FORMAT, field.DocValuesFormat.ToString(), _DOC_VALUES_FORMAT_DEFAULT.ToString());

            if (field.CopyTo != null && field.CopyTo.Any(x => !string.IsNullOrWhiteSpace(x)))
            {
                int count = field.CopyTo.Count(x => !string.IsNullOrWhiteSpace(x));

                if (count > 1)
                    fieldDict.AddObject(_COPY_TO, field.CopyTo.Where(x => !string.IsNullOrWhiteSpace(x)));
                else
                    fieldDict.AddObject(_COPY_TO, field.CopyTo.First(x => !string.IsNullOrWhiteSpace(x)));
            }

            fieldDict.AddObject(_NULL_VALUE, field.NullValue);
            if (field.Fields != null && field.Fields.Any(x => x != null))
                fieldDict.AddObject(_FIELDS, new DocumentPropertyCollection(field.Fields.Where(x => x != null)));
        }