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