从列表中动态设置 Automapper 成员映射

问题描述 投票:0回答:1

我有这个源类:

public class MyClass 
{
    public string Name { get; set; }
    public int Height { get; set; }
}

这个目标类(相同的类,但具有另一种语言的属性)

public class MiaClasse 
{
    public string Nominativo { get; set; } //Name
    public int Altezza { get; set; } //Height
}

我已经(来自一个旧项目)一个

Dictionary<string, string>()
,其中包含所有映射的属性,例如

<Name, Nominativo>
<Height, Altezza>

如何设置 AutoMapper 属性映射迭代字典?

类似(伪代码):

map = CreateMap<MyClass, MiaClasse>()

foreach (var m in alreadyExistingDictionary)  
{
    map.ForMember(m.Value, o => o.MapFrom(m.Key))
}

谢谢您的帮助。

c# automapper
1个回答
0
投票

我认为我确实过于关注一些 Automapper 隐藏功能来解决这个问题。 使用 C# 确实很容易解决。我确实喜欢这样:

map = CreateMap<MyClass, MiaClasse>()
foreach (var m in alreadyExistingDictionary)  
{
    var sourceMember = GetExpressionForProperty<TSource>(m.Key);
    var destMember = GetExpressionForProperty<TDestination>(m.Value);
    map.ForMember(destMember, o => o.MapFrom(sourceMember))
}

我必须创建一个函数来轻松获取成员的表达式,就像这样:

public static Expression<Func<T, object>> GetExpressionForProperty<T>(string name)
{
    var x = Expression.Parameter(typeof(T), "x");
    var p = Expression.Property(x, name);
    return Expression.Lambda<Func<T, object>>(Expression.Convert(p, typeof(object)), x);
}
© www.soinside.com 2019 - 2024. All rights reserved.