简介
-
Mapster是一个轻量、高性能的对象映射库,支持静态 & 动态映射、编译时代码生成、LINQ投影等多种模式。 -
与
AutoMapper、ExpressMapper等对比:-
性能更优:
Mapster在运行时基于表达式树生成委托,亦可使用Source Generator生成静态代码,启动一次性解析映射,后续调用近乎原生赋值速度; -
零侵入 & 零配置:默认按名称映射,亦支持通过
TypeAdapterConfig全局或局部配置,无需继承或打标; -
灵活多样:支持深度映射、扁平化、条件映射、
After/Before钩子、接口映射、枚举映射、集合映射、LINQ投影等。
-
-
核心特性亮点
-
零配置映射:支持自动映射同名属性
-
编译时映射:生成高效
IL代码 -
丰富扩展:内置集合映射、深度克隆等
-
轻量无依赖:仅 200KB 的轻量级库
-
高度可扩展:支持自定义转换规则
-
安装与配置
安装 NuGet 包
Install-Package Mapster
Install-Package Mapster.DependencyInjection # 若使用 DI 集成
Install-Package Mapster.Tool # 若需要源代码生成
在 ASP.NET Core 中注册
// Program.cs
builder.Services.AddMapster(config =>
{
// 注册全局配置
config.ForType<User, UserDto>()
.Map(dest => dest.FullName, src => $"{
src.FirstName} {
src.LastName}");
});
builder.Services.AddScoped<IMapper, ServiceMapper>();
// 1. 创建映射配置类
public class MappingConfig : IRegister
{
public void Register(TypeAdapterConfig config)
{
config.NewConfig<UserDto, UserViewModel>()
.Map(dest => dest.Name, src => src.FullName);
// 其他映射配置
}
}
// 2. 在 Startup.cs 中注册
public void ConfigureServices(IServiceCollection services)
{
// 注册 Mapster
services.AddMapster(config =>
{
// 扫描程序集中的所有 IRegister 实现
config.Scan(typeof(Startup).Assembly);
});
services.AddControllers();
}
// 3. 在控制器中使用
public class UserController : ControllerBase
{
private readonly IMapper _mapper;
public UserController(IMapper mapper)
{
_mapper = mapper;
}
[HttpGet]
public IActionResult GetUser(int id)
{
var userDto = _userService.GetUser(id); // 获取 DTO
var viewModel = _mapper.Map<UserViewModel>(userDto); // 映射到 ViewModel
return Ok(viewModel);
}
}
源生成器配置
[Mapper]
public interface IMapper
{
UserDto Map(User user);
}
[AdaptTo("[name]Dto"), GenerateMapper]
public class User
{
public int Id {
get; set; }

最低0.47元/天 解锁文章
222

被折叠的 条评论
为什么被折叠?



