如何使用 Automapper 将 Parent object 解压为 child object?

How to Unpack a Parent object into a child object using Automapper?

我想使用自动映射器解压缩 parent object 并用它创建一个新的 child object:

parent:

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();
});

由于同样的原因,这没有用,尽管我会争辩说我正在解决 object。

那么,如何解析 child object,以便我可以使用自动映射器创建它?

假设您想要与结果相同的对象引用:

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.MapConvertUsing 调用中:

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