我想使用automapper解包父对象并使用它创建一个新的子对象:
父:
public class Parent
{
public Child Child {get;set;}
}
public class Child
{
//stuff
}
首次尝试映射:
Mapper.CreateMap<Parent, Child>()
.ForMember(dest => dest, opt => opt.MapFrom(src => src.Parent.Child);
错误讯息:
Custom configuration for members is only supported for top-level individual members on a type.
这是有道理的,所以我试着自己解决它:
.BeforeMap((src, dest) =>
{
dest = new Child();
});
出于同样的原因,这并没有奏效,尽管我认为我正在解决这个问题。
那么,我如何解析子对象,以便我可以使用automapper创建它?
答案 0 :(得分:2)
假设您需要与结果相同的对象引用:
Mapper.CreateMap<Parent, Child>()
.ConvertUsing(par => par.Child);
在这里,您告诉AutoMapper您知道如何进行整个映射,在这种情况下只是意味着返回内部Child
属性。
请注意,如果你走这条路线,情况如下:
Parent p = new Parent();
Child c = Mapper.Map<Child>(p);
object.ReferenceEquals(parent.Child, c); // true
如果您想将整个Child
实例复制到全新的实例中,可以设置Child
→Child
的映射,然后调用Mapper.Map
内的ConvertUsing
Mapper.CreateMap<Parent, Child>()
.ConvertUsing(par => Mapper.Map<Child>(par.Child));
Mapper.CreateMap<Child, Child>();
Parent p = new Parent
{
Child = new Child { Name = "Kid" }
};
var ch = Mapper.Map<Child>(p);
object.ReferenceEquals(parent.Child, ch); // false
来电:
{{1}}