public void Serialize(T source, Entity destination) { var serializationInfo = _analyzer.GetSerializationInfo <T>(); foreach (var info in serializationInfo.Where(x => !x.IsKey)) { var sourceValue = info.Get(source); if (sourceValue == null) { continue; } var propertyValue = GetValueFromPropertyValue(info.PropertyType, sourceValue); propertyValue.ExcludeFromIndexes = info.ExcludeFromIndexes; destination.Properties.Add(info.Property, propertyValue); } }
private Filter ConvertFilter(StorageFilter filter) { switch (filter) { case AndFilter and: return(Filter.And(and.Filters.Select(ConvertFilter))); case ComparisonFilter <T> comparisonFilter: var serializationInfo = _entityAnalyzer.GetSerializationInfo(comparisonFilter.Property); var compareValue = _serializer.GetValueFromPropertyValue(serializationInfo.PropertyType, comparisonFilter.Value); return(comparisonFilter.ComparisonType switch { ComparisonType.Equals => Filter.Equal(serializationInfo.Property, compareValue), ComparisonType.GreaterThan => Filter.GreaterThan(serializationInfo.Property, compareValue), ComparisonType.LessThan => Filter.LessThan(serializationInfo.Property, compareValue), _ => throw new ArgumentOutOfRangeException() });