ASP.NET Core Web中使用AutoMapper進(jìn)行對(duì)象映射
前言
在日常開發(fā)中,我們常常需要將一個(gè)對(duì)象映射到另一個(gè)對(duì)象,這個(gè)過(guò)程中可能需要編寫大量的重復(fù)性代碼,如果每次都手動(dòng)編寫,不僅會(huì)影響開發(fā)效率,而且當(dāng)項(xiàng)目越來(lái)越復(fù)雜、龐大的時(shí)候還容易出現(xiàn)錯(cuò)誤。為了解決這個(gè)問(wèn)題,對(duì)象映射庫(kù)就隨之而出了,這些庫(kù)可以自動(dòng)完成對(duì)象之間的映射,從而減少大量的開發(fā)工作量,提高開發(fā)工作效率。今天我們來(lái)講講在ASP.NET Core Web中使用AutoMapper快速進(jìn)行對(duì)象映射。
使用對(duì)象映射庫(kù)有哪些好處?
- 減少開發(fā)工作量,提高開發(fā)效率。
- 減少開發(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)化了開發(fā)人員在處理對(duì)象映射時(shí)的工作量。
- GitHub開源地址: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í)名稱 /// </summary> [Display(Name = "班級(jí)名稱")] public string ClassName { get; set; } }
配置AutoMapper映射規(guī)則
我們可以定義一個(gè)AutoMapperMappingProfile
的映射配置文件,并在其中定義源類型和目標(biāo)類型之間的映射關(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ì)象映射操作
依賴注入獲取IMapper接口的實(shí)例
/// <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; } }
進(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開發(fā)者的開源技術(shù)社區(qū),旨在為開發(fā)者們提供全面的C#/.NET/.NET Core相關(guān)學(xué)習(xí)資料、技術(shù)分享和咨詢、項(xiàng)目框架推薦、求職和招聘資訊、以及解決問(wèn)題的平臺(tái)。
- 在DotNetGuide技術(shù)社區(qū)中,開發(fā)者們可以分享自己的技術(shù)文章、項(xiàng)目經(jīng)驗(yàn)、學(xué)習(xí)心得、遇到的疑難技術(shù)問(wèn)題以及解決方案,并且還有機(jī)會(huì)結(jié)識(shí)志同道合的開發(fā)者。
- 我們致力于構(gòu)建一個(gè)積極向上、和諧友善的.NET技術(shù)交流平臺(tái)。無(wú)論您是初學(xué)者還是有豐富經(jīng)驗(yàn)的開發(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顯示農(nóng)歷時(shí)間改進(jìn)版
這篇文章主要介紹了ASP.NET顯示農(nóng)歷時(shí)間改進(jìn)版,是針對(duì)前面一篇ASP.NET顯示農(nóng)歷時(shí)間的改進(jìn)版,實(shí)現(xiàn)了比較簡(jiǎn)單的封裝,增加了易用性,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-11-11ASP.NET 廣告控件AdRotator的使用方法與實(shí)例
廣告控件是asp.net中一個(gè)獨(dú)有的東西,他可以利用asp.net來(lái)生成廣告控件所需的xml文檔,然后再利用AdRotator來(lái)調(diào)用廣告xml文件,根據(jù)我們的參考進(jìn)行顯示2013-08-08ASP.NET?Core?Web?API中實(shí)現(xiàn)監(jiān)控的方法
本文介紹了在ASP.NETCoreWebAPI中實(shí)現(xiàn)監(jiān)控的幾種流行開源工具,可以監(jiān)控API的性能、請(qǐng)求、響應(yīng)時(shí)間、錯(cuò)誤率等,具有一定的參考價(jià)值,感興趣的可以了解一下2025-01-01ASP.Net MVC_DotNetZip簡(jiǎn)單使用方法,解決文件壓縮的問(wèn)題
下面小編就為大家?guī)?lái)一篇ASP.Net MVC_DotNetZip簡(jiǎn)單使用方法,解決文件壓縮的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06asp.net中調(diào)用winrar實(shí)現(xiàn)壓縮解壓縮的代碼
asp.net壓縮解壓縮,需要服務(wù)器安裝WinRar,并且把Rar.exe拷貝到網(wǎng)站根目錄。這樣我們就可以方面的執(zhí)行壓縮解壓縮了。2008-09-09用擴(kuò)展方法優(yōu)化多條件查詢(不定條件查詢)
在我們開發(fā)過(guò)程中,特別是管理系統(tǒng)的開發(fā),經(jīng)常會(huì)遇到多條件查詢(或者叫不定條件查詢)的案例,就是提供給User輸入的查詢條件有多個(gè)不同的查詢欄位,而且,在實(shí)際使用中并不能確定User會(huì)使用哪些條件來(lái)當(dāng)做搜索條件2012-12-12設(shè)置ASP.NET頁(yè)面不被緩存(客戶端/服務(wù)器端取消緩存方法)
設(shè)置頁(yè)面不被緩存:客戶端取消緩存、服務(wù)器具端取消緩存的具體實(shí)現(xiàn)代碼如下感興趣的朋友可以參考下哈,希望對(duì)大家有所幫助2013-06-06.NET 8 強(qiáng)大功能 IHostedService 與 Backgr
.NET 8 中的 IHostedService 和 BackgroundService 提供了強(qiáng)大的工具集,使定時(shí)任務(wù)、后臺(tái)處理以及定期維護(hù)等功能的實(shí)現(xiàn)變得更加直接、高效和靈活,感興趣的朋友跟隨小編一起看看吧2024-11-11relaxlife.net發(fā)布一個(gè)自己開發(fā)的中文分詞程序
relaxlife.net發(fā)布一個(gè)自己開發(fā)的中文分詞程序...2007-03-03swagger上傳文件并支持jwt認(rèn)證的實(shí)現(xiàn)方法
今天通過(guò)本文給大家分享swagger上傳文件并支持jwt認(rèn)證的實(shí)現(xiàn)方法,文中提到了安裝方法及實(shí)現(xiàn)代碼,感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧2018-05-05