最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何在?.NET?9?中使用?Mapster?快速、高效的實現(xiàn)對象映射

 更新時間:2025年10月22日 08:48:56   作者:追逐時光者  
本文我們的主要內容就是講解如何在ASP.NET?Core?9.0?Web?API項目中使用Mapster快速、高效的實現(xiàn)對象映射,本文結合實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧

前言

在日常開發(fā)中,我們常常需要將一個對象映射到另一個對象,比如將數據庫實體轉換為數據傳輸對象(DTO),或將請求模型映射為領域模型。這個過程通常涉及大量重復性代碼,如果每次都手動編寫,不僅嚴重影響開發(fā)效率,而且隨著項目規(guī)模不斷增長,還容易出現(xiàn)錯誤(如:屬性遺漏、手寫時寫錯或復制粘貼失誤等)。

本文我們的主要內容就是講解如何在 ASP.NET Core 9.0 Web API 項目中使用 Mapster 快速、高效的實現(xiàn)對象映射。

Mapster 介紹

Mapster 是一個開源免費(MIT license)、快速、高性能、靈活且易于使用的 .NET 對象映射庫,用于在 .NET 用程序中進行對象之間的轉換和映射操作,大幅減少手動賦值帶來的重復代碼、人為錯誤和維護成本。

安裝 Mapster 相關包

方式一、NuGet 包管理器安裝

在 NuGet 包管理器中搜索:Mapster 和 Mapster.DependencyInjection 安裝:

Mapster 核心功能包

Mapster.DependencyInjection 依賴注入集成包

方式二、.NET CLI 安裝

dotnet add package Mapster --version 7.4.0 #核心功能包
dotnet add package Mapster.DependencyInjection --version 1.0.1 #依賴注入集成包

在 Program.cs 中注冊 Mapster 服務

var builder = WebApplication.CreateBuilder(args);
// 注冊 Mapster 服務
builder.Services.AddMapster();
// 注冊 Mapster 映射規(guī)則
MapsterConfig.Register();

基礎映射一行代碼搞定

接下來我們分別定義一個源對象(Student)和一個目標對象(StudentViewModel),它們的屬性名和類型完全一致。

Student(源對象)    

public classStudent
    {
        /// <summary>
        /// 學生ID [主鍵,自動遞增]
        /// </summary>
        [PrimaryKey, AutoIncrement]
        [Display(Name = "學生ID")]
        publicint StudentID { get; set; }
        /// <summary>
        /// 班級ID
        /// </summary>
        [Display(Name = "班級ID")]
        publicint ClassID { get; set; }
        /// <summary>
        /// 學生姓名
        /// </summary>
        [Display(Name = "學生姓名")]
        publicstring Name { get; set; }
        /// <summary>
        /// 學生年齡
        /// </summary>
        [Display(Name = "學生年齡")]
        publicint Age { get; set; }
        /// <summary>
        /// 學生性別
        /// </summary>
        [Display(Name = "學生性別")]
        publicstring Gender { get; set; }
    }

StudentViewModel(目標對象)    

public classStudentViewModel
    {
        /// <summary>
        /// 學生ID
        /// </summary>
        [PrimaryKey, AutoIncrement]
        [Display(Name = "學生ID")]
        publicint StudentID { get; set; }
        /// <summary>
        /// 班級ID
        /// </summary>
        [Display(Name = "班級ID")]
        publicint ClassID { get; set; }
        /// <summary>
        /// 學生姓名
        /// </summary>
        [Display(Name = "學生姓名")]
        publicstring Name { get; set; }
        /// <summary>
        /// 學生年齡
        /// </summary>
        [Display(Name = "學生年齡")]
        publicint Age { get; set; }
        /// <summary>
        /// 學生性別
        /// </summary>
        [Display(Name = "學生性別")]
        publicstring Gender { get; set; }
        /// <summary>
        /// 班級名稱
        /// </summary>
        [Display(Name = "班級名稱")]
        publicstring ClassName { get; set; }
    }

Mapster 自動完成映射

只要屬性名和類型一致,Mapster 自動完成映射,無需任何配置!        

private async Task<List<StudentViewModel>?> GetStudentClassInfo(List<Student> students)
        {
            // Mapster 映射(無需任何配置!)
            var studentsListDto = students.Adapt<List<StudentViewModel>>();
            if (studentsListDto?.Count > 0)
            {
                var classIDs = studentsListDto.Select(x => x.ClassID).Distinct().ToList();
                var querySchoolClassList = await _schoolClassHelper.QueryAsync(x => classIDs.Contains(x.ClassID)).ConfigureAwait(false);
                if (querySchoolClassList?.Count > 0)
                {
                    foreach (var studentItem in studentsListDto)
                    {
                        var getClassInfo = querySchoolClassList.FirstOrDefault(x => x.ClassID == studentItem.ClassID);
                        if (getClassInfo != null)
                        {
                            studentItem.ClassName = getClassInfo.ClassName;
                        }
                    }
                }
            }
            return studentsListDto;
        }

映射結果輸出:

自定義映射規(guī)則

當屬性名或類型不一致時,可通過配置指定映射邏輯。

UserInfo(源對象)

public classUserInfo
    {
        publicint Id { get; set; }
        publicstring FirstName { get; set; }
        publicstring LastName { get; set; }
        publicstring Email { get; set; }
        public DateTime CreatedAt { get; set; }
    }

UserInfoViewModel(目標對象)    

public classUserInfoViewModel
    {
        publicint Id { get; set; }
        /// <summary>
        /// 合并 FirstName + LastName
        /// </summary>
        publicstring FullName { get; set; }
        publicstring Email { get; set; }
        /// <summary>
        /// 格式化日期
        /// </summary>
        publicstring CreatedDate { get; set; }
    }

配置 Mapster 映射規(guī)則

在項目根目錄創(chuàng)建 MapsterConfig.cs    

/// <summary>
    /// Mapster 全局映射配置類。
    /// 用于集中注冊項目中所有自定義的對象映射規(guī)則,
    /// 避免映射邏輯分散在各處,提升可維護性與可測試性。
    /// </summary>
    publicstaticclassMapsterConfig
    {
        /// <summary>
        /// 注冊所有自定義的 Mapster 映射配置
        /// 此方法應在應用程序啟動時(如 Program.cs)調用一次
        /// </summary>
        public static void Register()
        {
            TypeAdapterConfig<UserInfo, UserInfoViewModel>
                .NewConfig()
                .Map(dest => dest.FullName,
                     src => $"{src.FirstName} {src.LastName}".Trim())
                .Map(dest => dest.CreatedDate,
                     src => src.CreatedAt.ToString("yyyy-MM-dd"));
        }
    }

自定義映射規(guī)則    

/// <summary>
    /// 使用 Mapster 映射 UserInfo 示例
    /// </summary>
    [ApiController]
    [Route("api/[controller]/[action]")]
    publicclassUserInfoController : ControllerBase
    {
        privatereadonly IMapper _mapper;
        /// <summary>
        /// 依賴注入
        /// </summary>
        /// <param name="mapper">mapper</param>
        public UserInfoController(IMapper mapper)
        {
            _mapper = mapper;
        }
        /// <summary>
        /// GetUserInfo
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        public List<UserInfoViewModel> GetUserInfos()
        {
            var userInfos = new List<UserInfo>
            {
                new UserInfo
                {
                    Id = 999,
                    FirstName = "李",
                    LastName = "四",
                    Email = "lisi@qq.com",
                    CreatedAt = DateTime.Now.AddYears(-5)
                },
                new UserInfo
                {
                    Id = 666,
                    FirstName = "張",
                    LastName = "三",
                    Email = "zhangsan@example.com",
                    CreatedAt = DateTime.UtcNow.AddDays(-10)
                }
            };
            // 使用 Mapster 映射
            var getUserInfoViewModels = _mapper.Map<List<UserInfoViewModel>>(userInfos);
            return getUserInfoViewModels;
        }
    }

映射結果輸出:

完整示例源代碼

到此這篇關于在 .NET 9 中使用 Mapster 快速、高效的實現(xiàn)對象映射的文章就介紹到這了,更多相關.net  mapster 對象映射內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

闽侯县| 南岸区| 巩留县| 宣城市| 尼木县| 钟山县| 临朐县| 中西区| 比如县| 常山县| 津南区| 阜阳市| 青浦区| 蓬莱市| 恩平市| 平乡县| 三亚市| 含山县| 政和县| 柏乡县| 台南县| 安国市| 民权县| 申扎县| 普安县| 兴国县| 吉安市| 和龙市| 镇赉县| 民丰县| 庆阳市| 敖汉旗| 大兴区| 沈阳市| 沧州市| 民和| 曲周县| 滁州市| 衡南县| 旌德县| 突泉县|