在.net中使用AutoMapper进行对象映射,对象相互转,简单方便
AutoMapper是一种对象映射工具,它可以帮助我们将不同类型的数据对象之间进行相互转换。在.NET中,我们可以使用AutoMapper库来简化数据对象之间的映射操作,从而提高代码的可读性和可维护性。
一、AutoMapper的安装和基本使用
- 安装AutoMapper
首先,我们需要在项目中安装AutoMapper库。通过NuGet包管理器,我们可以方便地安装AutoMapper。在Visual Studio中,右键点击项目->管理NuGet程序包->浏览->搜索AutoMapper->安装即可。
- 定义数据模型
假设我们有两个类,一个是Source类,另一个是Destination类。我们希望将Source类的实例映射到Destination类。
public class Source
{
public int SomeValue { get; set; }
public string SomeString { get; set; }
}
public class Destination
{
public int SomeValue { get; set; }
public string SomeString { get; set; }
}
- 配置AutoMapper映射
我们在应用程序的配置文件(例如appsettings.json)中定义AutoMapper的映射配置。在这种情况下,我们定义了Source类和Destination类之间的映射关系。
{
"AutoMapper": {
"Maps": {
"SourceToDestination": {
"SomeValue": "SomeValue",
"SomeString": "SomeString"
}
}
}
}
- 使用AutoMapper进行映射
现在我们可以在代码中使用AutoMapper来将Source对象映射到Destination对象。
IMapper mapper = ConfigurationManager.GetService<IMapper>();
Source source = new Source { SomeValue = 5, SomeString = "Hello" };
Destination destination = mapper.Map<Destination>(source);
二、AutoMapper的高级应用
- 嵌套对象的映射
如果我们的Source类和Destination类具有嵌套的对象,我们可以使用AutoMapper来处理这些嵌套对象的映射。假设Source类有一个嵌套的Person类,而Destination类有一个嵌套的PersonDTO类,我们可以这样定义映射:
{
"AutoMapper": {
"Maps": {
"SourceToDestination": {
"SomeValue": "SomeValue",
"SomeString": "SomeString",
"Person.Name": "PersonDTO.Name",
"Person.Age": "PersonDTO.Age"
}
}
}
}
- 使用MapFrom和Condition进行自定义映射规则
有时候我们可能需要在映射过程中应用一些自定义的映射规则。AutoMapper提供了MapFrom和Condition关键字,可以让我们在映射过程中应用自定义的规则。例如,假设我们在映射Source类到Destination类时,希望将Source类的SomeString属性转换为大写,我们可以这样定义映射规则:
{
"AutoMapper": {
"Maps": {
"SourceToDestination": {
"SomeValue": "SomeValue",
"SomeString": {
"MapFrom": "ConvertToUpper",
"Condition": "it.SomeString != null"
}
}
}
},
"AutoMapperExternals": {
"Converts": [ { "Type": "System.String", "ConvertUsing": "ConvertToUpper" } ]
}
}
其中,在代码中我们需要定义一个ConvertToUpper方法来将字符串转换为大写。
public class StringConverter : ITypeConverter<string, string>
{
public string Convert(ResolutionContext context) => context.SourceValue.ToUpper();
}
- 映射继承属性
如果你有一个基类或接口,并且你想将该基类或接口的派生类映射到另一个对象,那么你可以使用AutoMapper的继承映射功能。你只需要在映射配置中指定基类和派生类之间的映射关系。
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
public class Employee : Person
{
public string Department { get; set; }
}
// 在映射配置中指定继承映射关系
cfg.CreateMap<Person, Employee>();
- 使用IgnoreMember和IncludeMember
有时候你可能会遇到一些不需要映射的属性,或者只希望映射对象的一部分属性。这时,你可以使用IgnoreMember和IncludeMember来控制映射过程。
// 忽略Source对象的某些属性
cfg.CreateMap<Source, Destination>().ForMember(dest => dest.IgnoredProperty, opt => opt.Ignore());
// 只映射Source对象的某些属性
cfg.CreateMap<Source, Destination>().ForMember(dest => dest.IncludedProperty, opt => opt.Include("SomeProperty"));
- 使用MapFrom和Condition
MapFrom和Condition可以让你在映射过程中执行更复杂的逻辑。比如,你可以使用MapFrom指定一个方法来确定目标属性的值,或者使用Condition来控制映射的条件。
// 使用MapFrom指定一个方法来确定目标属性的值
cfg.CreateMap<Source, Destination>().ForMember(dest => dest.ComputedProperty, opt => opt.MapFrom(src => CalculateValue(src)));
// 使用Condition来控制映射的条件
cfg.CreateMap<Source, Destination>().ForMember(dest => dest.ConditionalProperty, opt => opt.Condition(src => src.SomeProperty != null));
- 自定义分辨率器
有时候你可能会需要在映射过程中使用自定义的分辨率器。你可以实现AutoMapper的IValueResolver接口,并实现自己的分辨率逻辑。
public class CustomResolver : IValueResolver<Source, Destination, string>
{
public string Resolve(Source source, Destination destination, string member, IMappingExpression mapping)
{
// 实现自己的分辨率逻辑
return ResolveValue(source);
}
}
// 在映射配置中使用自定义分辨率器
cfg.CreateMap<Source, Destination>().ForMember(dest => dest.Property, opt => opt.ResolveUsing<CustomResolver>());
这些是AutoMapper的一些高级应用,可以帮助你更灵活地处理对象映射的各种情况。通过合理的配置和扩展AutoMapper,可以简化代码并提高开发效率.
更多技术文章,技术资源请关注公众号:架构师宝库
作者简介:
公众号【架构师宝库】,头条号【架构师老卢】20年资深软件架构师,分享编程、软件设计经验,教授前沿技术,分享技术资源(每天分享一本电子书),分享职场感悟。
在.net中使用AutoMapper进行对象映射,对象相互转,简单方便的更多相关文章
- 在 ASP.NET Core 项目中使用 AutoMapper 进行实体映射
一.前言 在实际项目开发过程中,我们使用到的各种 ORM 组件都可以很便捷的将我们获取到的数据绑定到对应的 List<T> 集合中,因为我们最终想要在页面上展示的数据与数据库实体类之间可能 ...
- ASP.NET Core Web 应用程序系列(五)- 在ASP.NET Core中使用AutoMapper进行实体映射
本章主要简单介绍下在ASP.NET Core中如何使用AutoMapper进行实体映射.在正式进入主题之前我们来看下几个概念: 1.数据库持久化对象PO(Persistent Object):顾名思义 ...
- 在MVC架构中使用CodeSmith生成NHibernate映射对象和实体类
第一步:找到生成模板,如下图 第二步:配置数据库连接(如下图),然后右击第一步找到的模板,点击Excute 第三步:执行操做(如下图) 第四步: 找到之前配置生成的文件夹,找到如下文件(图中标记的文件 ...
- .NET CORE 中使用AutoMapper进行对象映射
简介 AutoMapper uses a fluent configuration API to define an object-object mapping strategy. AutoMappe ...
- ASP.NET CORE 中使用AutoMapper进行对象映射
ASP.NET CORE 中使用AutoMapper进行对象映射 1.什么是AutoMapper? AutoMapper是基于对象到对象约定的映射工具,常用于(但并不仅限制于)把复杂的对象模型转为DT ...
- ASP.NET Core 中的对象映射之 AutoMapper
目录 AutoMapper 简介 AutoMapper 使用 初始化 Profile设置 扁平化映射 集合映射 投影 条件映射 值转换 设置转换前后行为 配置验证及设置 反向映射 自定义转换器 自定义 ...
- 对象映射工具AutoMapper介绍
AutoMapper是用来解决对象之间映射转换的类库.对于我们开发人员来说,写对象之间互相转换的代码是一件极其浪费生命的事情,AutoMapper能够帮助我们节省不少时间. 一. AutoMapper ...
- EF架构~AutoMapper对象映射工具简化了实体赋值的过程
回到目录 AutoMapper是一个.NET的对象映射工具,一般地,我们进行面向服务的开发时,都会涉及到DTO的概念,即数据传输对象,而为了减少系统的负载,一般我们不会把整个表的字段作为传输的数据,而 ...
- 一文为你详细讲解对象映射库【AutoMapper】所支持场景
前言 在AutoMapper未出世前,对象与对象之间的映射,我们只能通过手动为每个属性一一赋值,时间长了不仅是我们而且老外也觉得映射代码很无聊啊.这个时候老外的所写的强大映射库AutoMapper横空 ...
- .NET之AutoMapper对象映射工具运用
AutoMapper对象映射工具:主要是将某一个实体转成另一个实体. 1.引用NuGet包;搜索:AutoMapper 2.创建实体类 using System; using System.Colle ...
随机推荐
- oracle用户密码刷新
1.查询用户信息 col username for a25 col account_status for a18 col profile for a20 select username,account ...
- ASP.NET WebForm中asp:Repeater和UI:Grid数据为空时如何显示表头?
一.asp:Repeater Repeater 控件用于显示被绑定在该控件上的项目的重复列表.Repeater 控件可被绑定到数据库表.XML 文件或者其他项目列表. 1.1-前台页面代码 <a ...
- F-Beta-Score
F1-Score相关概念 F1分数(F1 Score),是统计学中用来衡量二分类(或多任务二分类)模型精确度的一种指标.它同时兼顾了分类模型的准确率和召回率. F1分数可以看作是模型准确率和召回率的一 ...
- 史上最强.NET数据分页方法
[前言] 本文讲述的.NET数据分页方法为[史上最强],已被多家大型科技公司实战采用 & 也被圈内多家知名IT培训机构转载收藏. [正文] 支持.Net Core(2.0及以上)与.Net F ...
- 基于 JMeter API 开发性能测试平台
背景: JMeter 是一个功能强大的性能测试工具,若开发一个性能测试平台,用它作为底层执行引擎在合适不过.如要使用其API,就不得不对JMeter 整个执行流程,常见的类有清楚的了解. 常用的 JM ...
- 面霸的自我修养:ThreadLocal专题
王有志,一个分享硬核Java技术的互金摸鱼侠 加入Java人的提桶跑路群:共同富裕的Java人 今天是<面霸的自我修养>第5篇文章,我们一起来看看面试中会问到哪些关于ThreadLocal ...
- 关闭k8s的pod时减小对服务的影响
在应用程序的整个生命周期中,正在运行的 pod 会由于多种原因而终止.在某些情况下,Kubernetes 会因用户输入(例如更新或删除 Deployment 时)而终止 pod.在其他情况下,Kube ...
- 2023年了,复习了一下spring boot配置使用mongodb
前言 MongoDB是一个基于分布式文件存储的开源数据库系统,使用C++语言编写.它是一个介于关系数据库和非关系数据库之间的产品,具有类似关系数据库的功能,但又有一些非关系数据库的特点.MongoDB ...
- FastGPT 接入飞书(不用写一行代码)
FastGPT V4 版本已经发布,可以通过 Flow 可视化进行工作流编排,从而实现复杂的问答场景,例如联网谷歌搜索,操作数据库等等,功能非常强大,还没用过的同学赶紧去试试吧. 飞书相比同类产品算是 ...
- Python中的转义符\
1.转义符 可以百度百科查询 2.Python中的转义符 我目前知道的Python中的转义符使用场景有两个:一个是字符串,一个是正则表达式 2.1.字符串的转义 2.1.1.反斜杠"\&qu ...