.NET 6使用对象与对象映射工具AutoMappper

Nuget 安装:AutoMapper.Extensions.Microsoft.DependencyInjection

创建MapperProfile

using AutoMapper;
namespace Mapper.Api.Profiles;
//要继承AutoMapper的Profile
public class MapperProfile : Profile
{
    //构造函数
    public MapperProfile()
    {
        //这里写映射规则
        //CreateMap<TSource,TDestination>();
    }
}

.Program.cs里添加AutoMapper

builder.Services.AddAutoMapper(typeof(MapperProfile));

在需要使用的类的构造函数中,注入AutoMapper

public MapperTest(IMapper mapper)
{
        Mapper = mapper;
}
public IMapper Mapper { get; }

使用映射 两种写法:

var student = new Student() { Id = 1, Name = "张三" };
var studentDate = new StudentData(){Id=2,StudentId=1,age=22};
 
//第一种写法    Mapper.Map<Sourse,Dest>();
//把Sourse类型的源数据转换为Dest类型的数据并返回Dest的实例;
var studentDto = Mapper.Map<StudentDto>(student);
            
//第二种写法   Mapper.Map(source,dest);
//把源数据,赋值到dest中,返回为dest
/*
var studentDto = new StudentDto();
Mapper.Map(studentDate,Mapper.Map(student,studentDto));
*/

CreateMap() 常用配置:

忽略单个字段,多个就写两行,太多了就想想自己代码是不是有问题

CreateMap<StudentData,StudentDto>()
        .ForMember(source=>source.Id,opt=>opt.Ignore())
        .ForMember(source=>source.Name,opt=>opt.Ignore());

自定义映射 使用MapForm 多个就写两行,太多了就想想自己代码是不是有问题

CreateMap<StudentData,StudentDto>()
        .ForMember(source=>source.Age,opt=>opt.MapFrom(s=>s.Age+s.Id))
        .ForMember(source=>source.Age,opt=>opt.MapFrom(s=>s.Age));