我有这个源类:
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))
}
谢谢您的帮助。
我认为我确实过于关注一些 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);
}