C# 使用表达式树创建自动映射配置

C# 使用表达式树创建自动映射配置,c#,.net,.net-core,automapper,C#,.net,.net Core,Automapper,我遇到了一个小问题,我正在使用automapper并从表达式树或反射创建贴图,但我没有获得成功,我将解释这个问题 基本上,在这段代码中,我尝试传递一个独立于属性类型的表达式树,但在“MapFrom”中出现了此异常: System.ArgumentOutOfRangeException:'只允许成员访问。 dest=>Convert(dest.Shipping.Method,Object)' 是否为此存在工作区 var peDestination = Expression.Parameter(d

我遇到了一个小问题,我正在使用automapper并从表达式树或反射创建贴图,但我没有获得成功,我将解释这个问题

基本上,在这段代码中,我尝试传递一个独立于属性类型的表达式树,但在“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));
}

var-peDestination=Expression.Parameter(destination.GetType(),“dest”);
var peSource=Expression.Parameter(source.GetType(),“src”);
如果(propertyMap.Destination.IndexOf('.')>=0)
{
表达式destinationExpression=peDestination;
foreach(在propertyMap.Destination.Split('.')中的变量NavigationPropertiedDestination)
destinationExpression=Expression.Property(destinationExpression,NavigationPropertiedDestination);
var sourceExpression=Expression.Property(peSource,propertyMap.Source);
var sourceMapFromExpression=Expression.Lambda(
Convert(sourceExpression,typeof(object)),新参数Expression[]{peSource});
////dest=>dest.Property
var destinationMapFromExpression=
Lambda
(Expression.Convert(destinationExpression,typeof(object)),新参数Expression[]{peDestination});
ForPath(destinationMapFromExpression,a=>a.MapFrom(sourceMapFromExpression));
}

您想要实现什么?我需要根据用户通过UI预定义的内容动态创建映射配置,例如ObjectA.PropertyA和map to ObjectB.InnerObject.Field。我在github上有一个例子。我们有一个基于字符串的
FormMember
,而不是基于字符串的
ForPath
。我认为这没有多大意义。你总是可以有另一个映射,然后你就不需要额外的间接寻址了。我不明白“额外间接寻址”是什么意思,我已经传递了字符串“Shipping.Method”,它就断了,我所做的解决方法是通过表达式调用,因为它是从对象内部的一个属性到另一个属性的。这个点是间接的:)你没有按照设计使用它,这就是为什么。我认为你应该实施你自己的事情。