【发布时间】:2012-02-25 00:26:04
【问题描述】:
使用 Automapper 2.0 映射内部对象的最佳方法是什么
使用这个question(Automapper 1.0)中的解决方案
创建自定义值解析器
-
?
public class DTOObject { // MainObject public int Id { get; set; } public string Name { get; set; } // SubObject (TopObject) public string TopText { get; set; } public string TopFont { get; set; } // SubObject (BottomObject) public string BottomText { get; set; } public string BottomFont { get; set; } } public class MainObject { public int Id { get; set; } public string Name { get; set; } public SubObject TopObject { get; set; } public SubObject BottomObject { get; set; } } public class SubObject { public string SubPropText { get; set; } public string SubPropFont { get; set; } }
自定义值解析器
public class CustomResolver : ValueResolver<DTOObject, SubObject>
{
protected override SubObject ResolveCore(DTOObject source)
{
return Mapper.Map<DTOObject, SubObject>(source);
}
}
【问题讨论】:
-
您是否可以控制 DTOObject 的设计?
-
是的,不,这是一个使用量很大的旧数据库。
-
你想往哪个方向走,DTOObject 到 MainObject 还是 MainObject 到 DTOObject?
-
可能最好使用
Mapper.CreateMap<DTOObject, MainObject>().ForMember(d => d.TopObject, mc => mc.MapFrom(s => new SubObject(){ SubPropText = s.TopText, SubPropFont = s.TopFont } )); -
另外请注意,在您的 CustomResolver 中您不应该调用 Mapper.Map() 您应该使用源中的属性创建子对象并返回它。
标签: c# automapper automapper-2