ASP.NET Core Web中使用AutoMapper進(jìn)行對(duì)象映射
前言
在日常開(kāi)發(fā)中,我們常常需要將一個(gè)對(duì)象映射到另一個(gè)對(duì)象,這個(gè)過(guò)程中可能需要編寫(xiě)大量的重復(fù)性代碼,如果每次都手動(dòng)編寫(xiě),不僅會(huì)影響開(kāi)發(fā)效率,而且當(dāng)項(xiàng)目越來(lái)越復(fù)雜、龐大的時(shí)候還容易出現(xiàn)錯(cuò)誤。為了解決這個(gè)問(wèn)題,對(duì)象映射庫(kù)就隨之而出了,這些庫(kù)可以自動(dòng)完成對(duì)象之間的映射,從而減少大量的開(kāi)發(fā)工作量,提高開(kāi)發(fā)工作效率。今天我們來(lái)講講在ASP.NET Core Web中使用AutoMapper快速進(jìn)行對(duì)象映射。
使用對(duì)象映射庫(kù)有哪些好處?
- 減少開(kāi)發(fā)工作量,提高開(kāi)發(fā)效率。
- 減少開(kāi)發(fā)過(guò)程中的錯(cuò)誤和bug。
- 簡(jiǎn)化代碼結(jié)構(gòu),提高代碼可讀性和可維護(hù)性。
AutoMapper對(duì)象映射庫(kù)介紹
AutoMapper是一個(gè)簡(jiǎn)單易用的.NET對(duì)象映射庫(kù),用于快速、方便地進(jìn)行對(duì)象之間的轉(zhuǎn)換和映射,極大的簡(jiǎn)化了開(kāi)發(fā)人員在處理對(duì)象映射時(shí)的工作量。
- GitHub開(kāi)源地址:https://github.com/AutoMapper/AutoMapper
- 在線文檔地址:https://docs.automapper.org/en/stable/Getting-started.html
安裝AutoMapper NuGet包
在ASP.NET Core Web API項(xiàng)目中搜索:AutoMapper NuGet包安裝。

創(chuàng)建源對(duì)象和目標(biāo)對(duì)象
接下來(lái)我們分別定義一個(gè)源對(duì)象(Student)和一個(gè)目標(biāo)對(duì)象(StudentViewModel)。
Student(源對(duì)象)
public class Student
{
/// <summary>
/// 學(xué)生ID [主鍵,自動(dòng)遞增]
/// </summary>
[PrimaryKey, AutoIncrement]
[Display(Name = "學(xué)生ID")]
public int StudentID { get; set; }
/// <summary>
/// 班級(jí)ID
/// </summary>
[Display(Name = "班級(jí)ID")]
public int ClassID { get; set; }
/// <summary>
/// 學(xué)生姓名
/// </summary>
[Display(Name = "學(xué)生姓名")]
public string Name { get; set; }
/// <summary>
/// 學(xué)生年齡
/// </summary>
[Display(Name = "學(xué)生年齡")]
public int Age { get; set; }
/// <summary>
/// 學(xué)生性別
/// </summary>
[Display(Name = "學(xué)生性別")]
public string Gender { get; set; }
}StudentViewModel(目標(biāo)對(duì)象)
public class StudentViewModel
{
/// <summary>
/// 學(xué)生ID [主鍵,自動(dòng)遞增]
/// </summary>
[PrimaryKey, AutoIncrement]
[Display(Name = "學(xué)生ID")]
public int StudentID { get; set; }
/// <summary>
/// 班級(jí)ID
/// </summary>
[Display(Name = "班級(jí)ID")]
public int ClassID { get; set; }
/// <summary>
/// 學(xué)生姓名
/// </summary>
[Display(Name = "學(xué)生姓名")]
public string Name { get; set; }
/// <summary>
/// 學(xué)生年齡
/// </summary>
[Display(Name = "學(xué)生年齡")]
public int Age { get; set; }
/// <summary>
/// 學(xué)生性別
/// </summary>
[Display(Name = "學(xué)生性別")]
public string Gender { get; set; }
/// <summary>
/// 班級(jí)名稱(chēng)
/// </summary>
[Display(Name = "班級(jí)名稱(chēng)")]
public string ClassName { get; set; }
}配置AutoMapper映射規(guī)則
我們可以定義一個(gè)AutoMapperMappingProfile的映射配置文件,并在其中定義源類(lèi)型和目標(biāo)類(lèi)型之間的映射關(guān)系。
using AutoMapper;
using Entity;
using Entity.ViewModel;
namespace WebApi
{
/// <summary>
/// AutoMapper映射配置文件
/// </summary>
public class AutoMapperMappingProfile : Profile
{
/// <summary>
/// 添加映射規(guī)則
/// </summary>
public AutoMapperMappingProfile()
{
CreateMap<Student, StudentViewModel>();
}
}
}Program中注冊(cè)AutoMapper服務(wù)
使用AddAutoMapper()方法可以將AutoMapper所需的服務(wù)添加到該集合中,以便在應(yīng)用程序的其他部分中使用。該方法需要傳入一個(gè)Assembly數(shù)組,以告訴AutoMapper要掃描哪些程序集來(lái)查找映射配置(在當(dāng)前作用域的所有程序集里面掃描AutoMapper的配置文件)。
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
//添加 AutoMapper 的配置
//使用AddAutoMapper()方法可以將AutoMapper所需的服務(wù)添加到該集合中,以便在應(yīng)用程序的其他部分中使用。
//該方法需要傳入一個(gè)Assembly數(shù)組,以告訴AutoMapper要掃描哪些程序集來(lái)查找映射配置(在當(dāng)前作用域的所有程序集里面掃描AutoMapper的配置文件)。
builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
}進(jìn)行對(duì)象映射操作
依賴(lài)注入獲取IMapper接口的實(shí)例
/// <summary>
/// 學(xué)生管理
/// </summary>
[ApiController]
[Route("api/[controller]/[action]")]
public class StudentController : ControllerBase
{
private readonly IMapper _mapper;
/// <summary>
/// 依賴(lài)注入
/// </summary>
/// <param name="mapper">mapper</param>
public StudentController(IMapper mapper)
{
_mapper = mapper;
}
}進(jìn)行對(duì)象映射操作
接下來(lái)我們使用使用IMapper接口的Map方法來(lái)進(jìn)行對(duì)象映射操作。
var studentsListDto = _mapper.Map<List<StudentViewModel>>(students);
映射結(jié)果輸出

完整示例源代碼

DotNetGuide技術(shù)社區(qū)交流群
- DotNetGuide技術(shù)社區(qū)是一個(gè)面向.NET開(kāi)發(fā)者的開(kāi)源技術(shù)社區(qū),旨在為開(kāi)發(fā)者們提供全面的C#/.NET/.NET Core相關(guān)學(xué)習(xí)資料、技術(shù)分享和咨詢(xún)、項(xiàng)目框架推薦、求職和招聘資訊、以及解決問(wèn)題的平臺(tái)。
- 在DotNetGuide技術(shù)社區(qū)中,開(kāi)發(fā)者們可以分享自己的技術(shù)文章、項(xiàng)目經(jīng)驗(yàn)、學(xué)習(xí)心得、遇到的疑難技術(shù)問(wèn)題以及解決方案,并且還有機(jī)會(huì)結(jié)識(shí)志同道合的開(kāi)發(fā)者。
- 我們致力于構(gòu)建一個(gè)積極向上、和諧友善的.NET技術(shù)交流平臺(tái)。無(wú)論您是初學(xué)者還是有豐富經(jīng)驗(yàn)的開(kāi)發(fā)者,我們都希望能為您提供更多的價(jià)值和成長(zhǎng)機(jī)會(huì)。
到此這篇關(guān)于ASP.NET Core Web中使用AutoMapper進(jìn)行對(duì)象映射的文章就介紹到這了,更多相關(guān)ASP.NET Core Web對(duì)象映射內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- ASP.NET?Core在WebApi項(xiàng)目中使用Cookie
- ASP.NET Core使用HttpClient調(diào)用WebService
- ASP.NET?Core項(xiàng)目中調(diào)用WebService的方法
- 創(chuàng)建ASP.NET?Core?Web應(yīng)用程序并介紹項(xiàng)目模板
- ASP.NET?Core命名空間System.Text.Encodings.Web介紹
- asp.net core webapi文件上傳功能的實(shí)現(xiàn)
- 在IIS上部署ASP.NET Core Web API的方法步驟
- ASP.NET Core實(shí)現(xiàn)自定義WebApi模型驗(yàn)證詳解
相關(guān)文章
ASP.NET MVC @Helper輔助方法和@functons自定義函數(shù)的使用方法
本文主要介紹ASP.NET MVC中使用@Helper和@functons自定義一些代碼片段,方便視圖調(diào)用,從而達(dá)到減少重復(fù)代碼,快速開(kāi)發(fā)的目的,希望對(duì)大家有所幫助。2016-04-04
.Net Core配置Configuration具體實(shí)現(xiàn)
這篇文章主要介紹了.Net Core配置Configuration具體實(shí)現(xiàn),文中運(yùn)用大量代碼進(jìn)行講解,如果有對(duì)相關(guān)知識(shí)感興趣的小伙伴可以參考這篇文章,希望可以幫助到你2021-09-09
ASP.NET MVC5驗(yàn)證系列之服務(wù)端驗(yàn)證
這篇文章主要為大家詳細(xì)介紹了ASP.NET MVC5驗(yàn)證系列之服務(wù)端驗(yàn)證,使用兩種方法來(lái)驗(yàn)證數(shù)據(jù)的合法性,手動(dòng)驗(yàn)證的方式和數(shù)據(jù)注解來(lái)進(jìn)行服務(wù)端驗(yàn)證,感興趣的小伙伴們可以參考一下2016-07-07
.NET實(shí)現(xiàn)異步編程async和await
這篇文章介紹了.NET實(shí)現(xiàn)異步編程async和await的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03
如何在ASP.Net Core中使用 IHostedService的方法
這篇文章主要介紹了如何在ASP.Net Core中使用 IHostedService的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
ASP.NET(C#) String, StringBuilder 與 StringWriter性能比較
ASP.NET(C#) String, StringBuilder 與 StringWriter性能比較...2007-08-08
ASP.NET 頁(yè)面中加添加用戶(hù)控件的寫(xiě)法
這篇文章主要介紹了ASP.NET 頁(yè)面中加添加用戶(hù)控件的方法,需要的朋友可以參考下2014-03-03
ASP.NET?MVC使用Log4Net記錄異常日志并跳轉(zhuǎn)到靜態(tài)頁(yè)
這篇文章介紹了ASP.NET?MVC使用Log4Net記錄異常日志并跳轉(zhuǎn)到靜態(tài)頁(yè)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09

