我想将 Parent 映射到 ParentMaped,并且 Child 应该映射到 ChildMapped,但 ChildMap 的源也是 Parent,因为 ChildMap 的 SomeFlag 属性应该由 Parent 的 SomeFlag 属性提供。类如下所示:
public class Parent
{
public bool SomeFlag { get; set; }
public List<Child> Children { get; set; }
}
public class ParentMapped
{
public List<ChildMapped> Children { get; set; }
}
public class Child
{
}
public class ChildMapped
{
public bool SomeFlag { get; set; }
}
假设父类和子类的结构无法修改。我尝试像这样配置映射:
Mapper.CreateMap<Parent, ParentMapped>();
Mapper.CreateMap<Child, ChildMapped>();
Mapper.CreateMap<Parent,ChildMapped>()
.ForMember(dest => dest.SomeFlag, opt => opt.MapFrom(src => src));
并通过像这样调用来执行映射:
var instanceOfParent = new Parent();
var intanceOfParentMapped = mapper.Map<ParentMapped>(instanceOfParent);
但是这个解决方案不起作用。
使用自动映射器甚至可以进行这种映射吗?
您可以定义要在映射后运行的操作:
Mapper.CreateMap<Parent, ParentMapped>()
.AfterMap((m,d) => d.Children.ForEach(c => c.SomeFlag = m.SomeFlag));
一种方法是将 Parent 属性添加到 Child 中,然后执行 ForMember(x => x.SomeFlag,opt => opt。MapsFrom(src => src.Parent.SomeFlag)。
或者,您可以为父级使用 ConstructUsing 方法,但如果这样做,使用 AutoMapper 就没有什么意义了。