如何使用Automapper将Parent对象解压缩为子对象?

时间:2015-06-19 13:56:13

标签: c# automapper

我想使用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创建它?

1 个答案:

答案 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实例复制到全新的实例中,可以设置ChildChild的映射,然后调用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}}