前言
AutoMapper 是一个强大的对象映射库,用于简化和自动化复杂对象之间的转换。
本文总结了 AutoMapper 10 个常用的方法和功能,作为前文《C# 对象映射方法总结(2):AutoMapper 高效实现对象映射详细步骤分享》的补充!
1. 创建映射
在使用 AutoMapper 之前,需要创建映射配置,通常在 Profile
类中进行:
using AutoMapper;
public class MappingProfile : Profile
{
public MappingProfile()
{
CreateMap<SourceModel, DestinationModel>();
}
}
2. 初始化 AutoMapper
在应用程序启动时,通常会在 Startup.cs
的 ConfigureServices
方法中(.NET Framework)或 Program.cs
(.NET Core)里配置 AutoMapper:
services.AddAutoMapper(typeof(MappingProfile));
// 详细代码过程可参考前文
// 也可以利用反射自动扫描当前程序集中的所有继承 Profile 的配置程序
3. 映射对象
使用以下方法进行对象映射:
-
Mapper.Map<TDestination>(source)
:将源对象映射到目标类型。
var destination = Mapper.Map<DestinationModel>(source);
-
Mapper.Map(source, destination)
:将源对象的值映射到已存在的目标对象。
Mapper.Map(source, destination);
4. 使用依赖注入的 IMapper
如果使用依赖注入,可以直接在构造函数中注入 IMapper
,如下代码:
public class PersonService
{
private readonly IMapper _mapper;
public PersonService(IMapper mapper)
{
_mapper = mapper;
}
public DestinationModel Convert(SourceModel source)
{
return _mapper.Map<DestinationModel>(source);
}
}
5. 配置映射选项
自定义映射的行为可以通过各种选项进行配置。
例如,忽略某些属性、使用自定义转换等:
-
忽略属性:
CreateMap<SourceModel, DestinationModel>() .ForMember(dest => dest.SomeProperty, opt => opt.Ignore());
-
使用自定义转换:
CreateMap<SourceModel, DestinationModel>() .ForMember(dest => dest.SomeProperty, opt => opt.MapFrom(src => CustomConversion(src)));
6. 集合映射
AutoMapper 支持直接映射集合:
var sourceList = new List<SourceModel> { /* ... */ };
var destinationList = _mapper.Map<List<DestinationModel>>(sourceList);
7. 条件映射
支持根据特定条件进行映射:
CreateMap<SourceModel, DestinationModel>()
.ForMember(dest => dest.SomeProperty,
opt => opt.Condition(src => src.SomeCondition == true));
8. 映射嵌套对象
AutoMapper 还支持嵌套对象的映射:
CreateMap<ParentSourceModel, ParentDestinationModel>();
CreateMap<ChildSourceModel, ChildDestinationModel>();
只需创建好子映射,AutoMapper 会自动处理嵌套关系。
9. 自定义解析器
可以定义自定义解析器以处理更复杂的映射逻辑:
// 自定义解析器
public class CustomValueResolver : IValueResolver<SourceModel, DestinationModel, string>
{
public string Resolve(SourceModel source, DestinationModel destination, string destMember, ResolutionContext context)
{
// 返回处理后的值
return source.SomeProperty + " - custom";
}
}
// 在映射中使用自定义解析器
CreateMap<SourceModel, DestinationModel>()
.ForMember(dest => dest.SomeProperty, opt => opt.MapFrom<CustomValueResolver>());
10. 逆向映射
可以启用逆向映射以允许从目标类型到源类型的映射,这在需要从 DTO 转换回实体时非常有用:
CreateMap<SourceModel, DestinationModel>()
.ReverseMap();
总结
以上是 AutoMapper 的一些常用方法和功能。
在实际使用中,可以根据具体需求创建和配置映射,以确保对象之间的转换能满足业务的要求。
好了,本文的分享就到这里啦,如果觉得有用,别忘了点个【赞与在看】哦,你的支持是我最大的动力!
最后,如果你有更好的想法或建议,欢迎留言讨论!
往期精彩
- 把 C# 里的 HttpClient 封装起来,告别复杂的配置,让 Restful API 调用更轻松更高效
- C#12 中 5 个节省你开发时间的的改进
- C# 静态类,高手不想让你知道的 15 个真相
- 封装一个 C# 范围判断函数,从此告别重复编写范围判断代码的烦恼
- 用 C# Stopwatch 计时,让代码性能飞起来!
- 轻装上阵,Visual Studio LocalDB:.NET 程序员的本地数据库神器
- 封装一个C#万能基础数据类型转换器,一招解决所有基础类型转换烦恼
- 闲话 .NET(7):.NET Core 能淘汰 .NET FrameWork 吗?
- 常用的 4 种 ORM 框架(EF Core,SqlSugar,FreeSql,Dapper)对比总结
- C# AutoMapper 10个常用方法总结
- C# 7个方法比较两个对象是否相等
- C# 去掉字符串最后一个字符的 4 种方法
我是老杨,一个执着于编程乐趣、至今奋斗在一线的 10年+ 资深研发老鸟,是软件项目管理师,也是快乐的程序猿,持续免费分享全栈实用编程技巧、项目管理经验和职场成长心得!欢迎点击下方卡片关注老杨的公众号,更多干货等你来!