在 Automapper 中映射复杂对象

问题描述 投票:0回答:1

以下是使用 Automapper 可以正常工作的简单对象:

public class Source
{
 public int Id {get;set;}
 public string Name {get;set;}
}

public class Destination
{
 public int Id {get;set;}
 public string Name {get;set;}
}

SampleClass.cs

using Automapper;

public class SampleClass
{
  private IMapper _mapper;
  public SampleClass(IMapper mapper)
  {
    _mapper = mapper;
  }

 public void Logic(Souce source)
 {
   var Dest = _mapper.Map<Destination>(source);
 }
}

上面的映射语句工作正常,我看到所有字段都从源映射到目标,因为它是一个简单的对象。

但我的要求是,我有一个复杂的对象结构如下:

public class Source
{
 public int Id {get;set;}
 public string Name {get;set;}
 public List<SourceChild> lstChild {get;set;}
}
public class SourceChild
{
 public string Address{get;set;}
}

public class Destination
{
 public int Id {get;set;}
 public string Name {get;set;}
 public List<SourceDestination> lstChild {get;set;}
}
public class SourceDestination
{
 public string Address{get;set;}
}

public void Logic(Souce source)
 {
   var Dest = _mapper.Map<Destination>(source);
 }

上述映射会导致异常,提示“缺少类型映射配置或不支持的映射”。我在这里缺少什么来映射复杂的对象?

c# asp.net .net automapper
1个回答
0
投票
  1. 您需要有一个映射配置文件/配置如下:
public class SourceProfile : Profile
{
    public SourceProfile()
    {
        CreateMap<Source, Destination>();
        CreateMap<SourceChild, SourceDestination>();
    }
}
  1. 将映射配置文件注册到映射器配置
MapperConfiguration _config = new MapperConfiguration(cfg => cfg.AddProfile<SourceProfile>());

如果您使用的是 ASP.NET Core,则将 AutoMapper 服务注册到 DI 容器中,其中项目程序集包含您的

Profile
类(程序集扫描以进行自动配置)。

services.AddAutoMapper(/* profileAssembly1 */);
© www.soinside.com 2019 - 2024. All rights reserved.