嵌套映射

概念

源对象里面包含另外一个复杂对象属性,目标对象也有对应的嵌套对象属性。只要内外层都配置好CreateMap,AutoMapper会自动完成嵌套对象映射,不需要额外写ForMember

源实体

public class OuterSource
{
    public int Value { get; set; }
    public InnerSource Inner { get; set; }
}

public class InnerSource
{
    public int OtherValue { get; set; }
}Code language: JavaScript (javascript)

目标实体

public class OuterDest
{
    public int Value { get; set; }
    public InnerDest Inner { get; set; }
}

public class InnerDest
{
    public int OtherValue { get; set; }
}Code language: JavaScript (javascript)

映射配置

外层、内层分别创建映射,配置顺序无关

var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<OuterSource, OuterDest>();
    cfg.CreateMap<InnerSource, InnerDest>();
});

config.AssertConfigurationIsValid();Code language: JavaScript (javascript)

使用

var source = new OuterSource
{
    Value = 5,
    Inner = new InnerSource { OtherValue = 15 }
};

var mapper = config.CreateMapper();
var dest = mapper.Map<OuterSource, OuterDest>(source);

// dest.Value == 5
// dest.Inner != null
// dest.Inner.OtherValue ==15Code language: JavaScript (javascript)

注意

  1. 配置顺序无所谓,内层、外层谁先写都可以。
  2. Map()调用时,只需要指定最外层源、目标类型,内部嵌套类型自动使用已配置的映射,不用单独处理内层。
  3. 如果内层没有写CreateMap<InnerSource,InnerDest>(),校验AssertConfigurationIsValid()会报错。
  4. 如果源对象Inner = null,映射后目标Inner也等于null

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注