У меня небольшая проблема: я использую автомапер и создаю карты из дерева выражений или отражений, но не добился успеха, я объясню проблему.
В основном в этом коде я пытаюсь передать дерево выражений независимо от типа свойства, но это исключение возникает в MapFrom:
System.ArgumentOutOfRangeException: 'Разрешен только доступ к элементам. dest => Convert (dest.Shipping.Method, Object) '
Существует ли обходной путь для этого?
var peDestination = Expression.Parameter(destination.GetType(), "dest");
var peSource = Expression.Parameter(source.GetType(), "src");
if (propertyMap.Destination.IndexOf('.') >= 0)
{
Expression destinationExpression = peDestination;
foreach (var navigatinoPropertieDestination in propertyMap.Destination.Split('.'))
destinationExpression = Expression.Property(destinationExpression,navigatinoPropertieDestination);
var sourceExpression = Expression.Property(peSource, propertyMap.Source);
var sourceMapFromExpression = Expression.Lambda<Func<TSource, object>>(
Expression.Convert(sourceExpression, typeof(object)), new ParameterExpression[] { peSource });
//// dest => dest.Property
var destinationMapFromExpression =
Expression.Lambda<Func<TDestination, object>>
(Expression.Convert(destinationExpression, typeof(object)), new ParameterExpression[] { peDestination });
map.ForPath(destinationMapFromExpression, a => a.MapFrom(sourceMapFromExpression));
}