ASP.NET Core Web中使用AutoMapper進行對象映射
前言
在日常開發(fā)中,我們常常需要將一個對象映射到另一個對象,這個過程中可能需要編寫大量的重復(fù)性代碼,如果每次都手動編寫,不僅會影響開發(fā)效率,而且當項目越來越復(fù)雜、龐大的時候還容易出現(xiàn)錯誤。為了解決這個問題,對象映射庫就隨之而出了,這些庫可以自動完成對象之間的映射,從而減少大量的開發(fā)工作量,提高開發(fā)工作效率。今天我們來講講在ASP.NET Core Web中使用AutoMapper快速進行對象映射。
使用對象映射庫有哪些好處?
- 減少開發(fā)工作量,提高開發(fā)效率。
- 減少開發(fā)過程中的錯誤和bug。
- 簡化代碼結(jié)構(gòu),提高代碼可讀性和可維護性。
AutoMapper對象映射庫介紹
AutoMapper是一個簡單易用的.NET對象映射庫,用于快速、方便地進行對象之間的轉(zhuǎn)換和映射,極大的簡化了開發(fā)人員在處理對象映射時的工作量。
- GitHub開源地址:https://github.com/AutoMapper/AutoMapper
- 在線文檔地址:https://docs.automapper.org/en/stable/Getting-started.html
安裝AutoMapper NuGet包
在ASP.NET Core Web API項目中搜索:AutoMapper
NuGet包安裝。
創(chuàng)建源對象和目標對象
接下來我們分別定義一個源對象(Student
)和一個目標對象(StudentViewModel
)。
Student(源對象)
public class Student { /// <summary> /// 學(xué)生ID [主鍵,自動遞增] /// </summary> [PrimaryKey, AutoIncrement] [Display(Name = "學(xué)生ID")] public int StudentID { get; set; } /// <summary> /// 班級ID /// </summary> [Display(Name = "班級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(目標對象)
public class StudentViewModel { /// <summary> /// 學(xué)生ID [主鍵,自動遞增] /// </summary> [PrimaryKey, AutoIncrement] [Display(Name = "學(xué)生ID")] public int StudentID { get; set; } /// <summary> /// 班級ID /// </summary> [Display(Name = "班級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> /// 班級名稱 /// </summary> [Display(Name = "班級名稱")] public string ClassName { get; set; } }
配置AutoMapper映射規(guī)則
我們可以定義一個AutoMapperMappingProfile
的映射配置文件,并在其中定義源類型和目標類型之間的映射關(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中注冊AutoMapper服務(wù)
使用AddAutoMapper()方法可以將AutoMapper所需的服務(wù)添加到該集合中,以便在應(yīng)用程序的其他部分中使用。該方法需要傳入一個Assembly數(shù)組,以告訴AutoMapper要掃描哪些程序集來查找映射配置(在當前作用域的所有程序集里面掃描AutoMapper的配置文件)。
public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); //添加 AutoMapper 的配置 //使用AddAutoMapper()方法可以將AutoMapper所需的服務(wù)添加到該集合中,以便在應(yīng)用程序的其他部分中使用。 //該方法需要傳入一個Assembly數(shù)組,以告訴AutoMapper要掃描哪些程序集來查找映射配置(在當前作用域的所有程序集里面掃描AutoMapper的配置文件)。 builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies()); }
進行對象映射操作
依賴注入獲取IMapper接口的實例
/// <summary> /// 學(xué)生管理 /// </summary> [ApiController] [Route("api/[controller]/[action]")] public class StudentController : ControllerBase { private readonly IMapper _mapper; /// <summary> /// 依賴注入 /// </summary> /// <param name="mapper">mapper</param> public StudentController(IMapper mapper) { _mapper = mapper; } }
進行對象映射操作
接下來我們使用使用IMapper接口的Map方法來進行對象映射操作。
var studentsListDto = _mapper.Map<List<StudentViewModel>>(students);
映射結(jié)果輸出
完整示例源代碼
DotNetGuide技術(shù)社區(qū)交流群
- DotNetGuide技術(shù)社區(qū)是一個面向.NET開發(fā)者的開源技術(shù)社區(qū),旨在為開發(fā)者們提供全面的C#/.NET/.NET Core相關(guān)學(xué)習(xí)資料、技術(shù)分享和咨詢、項目框架推薦、求職和招聘資訊、以及解決問題的平臺。
- 在DotNetGuide技術(shù)社區(qū)中,開發(fā)者們可以分享自己的技術(shù)文章、項目經(jīng)驗、學(xué)習(xí)心得、遇到的疑難技術(shù)問題以及解決方案,并且還有機會結(jié)識志同道合的開發(fā)者。
- 我們致力于構(gòu)建一個積極向上、和諧友善的.NET技術(shù)交流平臺。無論您是初學(xué)者還是有豐富經(jīng)驗的開發(fā)者,我們都希望能為您提供更多的價值和成長機會。
到此這篇關(guān)于ASP.NET Core Web中使用AutoMapper進行對象映射的文章就介紹到這了,更多相關(guān)ASP.NET Core Web對象映射內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ASP.NET?Core?Web?API中實現(xiàn)監(jiān)控的方法
本文介紹了在ASP.NETCoreWebAPI中實現(xiàn)監(jiān)控的幾種流行開源工具,可以監(jiān)控API的性能、請求、響應(yīng)時間、錯誤率等,具有一定的參考價值,感興趣的可以了解一下2025-01-01ASP.Net MVC_DotNetZip簡單使用方法,解決文件壓縮的問題
下面小編就為大家?guī)硪黄狝SP.Net MVC_DotNetZip簡單使用方法,解決文件壓縮的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-06-06asp.net中調(diào)用winrar實現(xiàn)壓縮解壓縮的代碼
asp.net壓縮解壓縮,需要服務(wù)器安裝WinRar,并且把Rar.exe拷貝到網(wǎng)站根目錄。這樣我們就可以方面的執(zhí)行壓縮解壓縮了。2008-09-09設(shè)置ASP.NET頁面不被緩存(客戶端/服務(wù)器端取消緩存方法)
設(shè)置頁面不被緩存:客戶端取消緩存、服務(wù)器具端取消緩存的具體實現(xiàn)代碼如下感興趣的朋友可以參考下哈,希望對大家有所幫助2013-06-06.NET 8 強大功能 IHostedService 與 Backgr
.NET 8 中的 IHostedService 和 BackgroundService 提供了強大的工具集,使定時任務(wù)、后臺處理以及定期維護等功能的實現(xiàn)變得更加直接、高效和靈活,感興趣的朋友跟隨小編一起看看吧2024-11-11relaxlife.net發(fā)布一個自己開發(fā)的中文分詞程序
relaxlife.net發(fā)布一個自己開發(fā)的中文分詞程序...2007-03-03swagger上傳文件并支持jwt認證的實現(xiàn)方法
今天通過本文給大家分享swagger上傳文件并支持jwt認證的實現(xiàn)方法,文中提到了安裝方法及實現(xiàn)代碼,感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧2018-05-05