日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

在.NET中使用AutoMapper進(jìn)行對象映射,對象相互轉(zhuǎn),簡單方便

來源: 責(zé)編: 時間:2023-12-15 17:16:04 285觀看
導(dǎo)讀AutoMapper是一種對象映射工具,它可以幫助我們將不同類型的數(shù)據(jù)對象之間進(jìn)行相互轉(zhuǎn)換。在.NET中,我們可以使用AutoMapper庫來簡化數(shù)據(jù)對象之間的映射操作,從而提高代碼的可讀性和可維護(hù)性。一、AutoMapper的安裝和基本使

Wa728資訊網(wǎng)——每日最新資訊28at.com

AutoMapper是一種對象映射工具,它可以幫助我們將不同類型的數(shù)據(jù)對象之間進(jìn)行相互轉(zhuǎn)換。在.NET中,我們可以使用AutoMapper庫來簡化數(shù)據(jù)對象之間的映射操作,從而提高代碼的可讀性和可維護(hù)性。Wa728資訊網(wǎng)——每日最新資訊28at.com

一、AutoMapper的安裝和基本使用

1、安裝AutoMapper

首先,我們需要在項目中安裝AutoMapper庫。通過NuGet包管理器,我們可以方便地安裝AutoMapper。在Visual Studio中,右鍵點擊項目->管理NuGet程序包->瀏覽->搜索AutoMapper->安裝即可。Wa728資訊網(wǎng)——每日最新資訊28at.com

2、定義數(shù)據(jù)模型

假設(shè)我們有兩個類,一個是Source類,另一個是Destination類。我們希望將Source類的實例映射到Destination類。Wa728資訊網(wǎng)——每日最新資訊28at.com

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; }}

3、配置AutoMapper映射

我們在應(yīng)用程序的配置文件(例如appsettings.json)中定義AutoMapper的映射配置。在這種情況下,我們定義了Source類和Destination類之間的映射關(guān)系。Wa728資訊網(wǎng)——每日最新資訊28at.com

{    "AutoMapper": {        "Maps": {            "SourceToDestination": {                "SomeValue": "SomeValue",                "SomeString": "SomeString"            }        }    }}

4、使用AutoMapper進(jìn)行映射

現(xiàn)在我們可以在代碼中使用AutoMapper來將Source對象映射到Destination對象。Wa728資訊網(wǎng)——每日最新資訊28at.com

IMapper mapper = ConfigurationManager.GetService<IMapper>();Source source = new Source { SomeValue = 5, SomeString = "Hello" };Destination destination = mapper.Map<Destination>(source);

二、AutoMapper的高級應(yīng)用

1、嵌套對象的映射

如果我們的Source類和Destination類具有嵌套的對象,我們可以使用AutoMapper來處理這些嵌套對象的映射。假設(shè)Source類有一個嵌套的Person類,而Destination類有一個嵌套的PersonDTO類,我們可以這樣定義映射:Wa728資訊網(wǎng)——每日最新資訊28at.com

{    "AutoMapper": {        "Maps": {            "SourceToDestination": {                "SomeValue": "SomeValue",                "SomeString": "SomeString",                "Person.Name": "PersonDTO.Name",                "Person.Age": "PersonDTO.Age"            }        }    }}

2、使用MapFrom和Condition進(jìn)行自定義映射規(guī)則

有時候我們可能需要在映射過程中應(yīng)用一些自定義的映射規(guī)則。AutoMapper提供了MapFrom和Condition關(guān)鍵字,可以讓我們在映射過程中應(yīng)用自定義的規(guī)則。例如,假設(shè)我們在映射Source類到Destination類時,希望將Source類的SomeString屬性轉(zhuǎn)換為大寫,我們可以這樣定義映射規(guī)則:Wa728資訊網(wǎng)——每日最新資訊28at.com

{    "AutoMapper": {        "Maps": {            "SourceToDestination": {                "SomeValue": "SomeValue",                "SomeString": {                     "MapFrom": "ConvertToUpper",                     "Condition": "it.SomeString != null"                 }            }        }    },    "AutoMapperExternals": {        "Converts": [ { "Type": "System.String", "ConvertUsing": "ConvertToUpper" } ]    }}

其中,在代碼中我們需要定義一個ConvertToUpper方法來將字符串轉(zhuǎn)換為大寫。Wa728資訊網(wǎng)——每日最新資訊28at.com

public class StringConverter : ITypeConverter<string, string>{    public string Convert(ResolutionContext context) => context.SourceValue.ToUpper();}

3、映射繼承屬性

如果你有一個基類或接口,并且你想將該基類或接口的派生類映射到另一個對象,那么你可以使用AutoMapper的繼承映射功能。你只需要在映射配置中指定基類和派生類之間的映射關(guān)系。Wa728資訊網(wǎng)——每日最新資訊28at.com

public class Person{    public string Name { get; set; }    public int Age { get; set; }}public class Employee : Person{    public string Department { get; set; }}// 在映射配置中指定繼承映射關(guān)系cfg.CreateMap<Person, Employee>();

4、使用IgnoreMember和IncludeMember

有時候你可能會遇到一些不需要映射的屬性,或者只希望映射對象的一部分屬性。這時,你可以使用IgnoreMember和IncludeMember來控制映射過程。Wa728資訊網(wǎng)——每日最新資訊28at.com

// 忽略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"));

5、使用MapFrom和Condition

MapFrom和Condition可以讓你在映射過程中執(zhí)行更復(fù)雜的邏輯。比如,你可以使用MapFrom指定一個方法來確定目標(biāo)屬性的值,或者使用Condition來控制映射的條件。Wa728資訊網(wǎng)——每日最新資訊28at.com

// 使用MapFrom指定一個方法來確定目標(biāo)屬性的值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));

6、自定義分辨率器

有時候你可能會需要在映射過程中使用自定義的分辨率器。你可以實現(xiàn)AutoMapper的IValueResolver接口,并實現(xiàn)自己的分辨率邏輯。Wa728資訊網(wǎng)——每日最新資訊28at.com

public class CustomResolver : IValueResolver<Source, Destination, string>{    public string Resolve(Source source, Destination destination, string member, IMappingExpression mapping)    {        // 實現(xiàn)自己的分辨率邏輯        return ResolveValue(source);    }}// 在映射配置中使用自定義分辨率器cfg.CreateMap<Source, Destination>().ForMember(dest => dest.Property, opt => opt.ResolveUsing<CustomResolver>());

這些是AutoMapper的一些高級應(yīng)用,可以幫助你更靈活地處理對象映射的各種情況。通過合理的配置和擴(kuò)展AutoMapper,可以簡化代碼并提高開發(fā)效率Wa728資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-46462-0.html在.NET中使用AutoMapper進(jìn)行對象映射,對象相互轉(zhuǎn),簡單方便

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 三星 Galaxy Z Fold5 集領(lǐng)先科技之大成 加速折疊屏手機(jī)普及

下一篇: React Native 0.73 正式發(fā)布,你知道增加了什么嗎?

標(biāo)簽:
  • 熱門焦點
  • vivo TWS Air開箱體驗:真輕 臻好聽

    在vivo S15系列新機(jī)的發(fā)布會上,vivo的最新款真無線藍(lán)牙耳機(jī)vivo TWS Air也一同發(fā)布,本次就這款耳機(jī)新品給大家?guī)硪粋€簡單的分享。外包裝盒上,vivo TWS Air保持了vivo自家產(chǎn)
  • 7月安卓手機(jī)性能榜:紅魔8S Pro再奪榜首

    7月份的手機(jī)市場風(fēng)平浪靜,除了紅魔和努比亞帶來了兩款搭載驍龍8Gen2領(lǐng)先版處理器的新機(jī)之外,別的也想不到有什么新品了,這也正常,通常6月7月都是手機(jī)廠商修整的時間,進(jìn)入8月份之
  • 把LangChain跑起來的三個方法

    使用LangChain開發(fā)LLM應(yīng)用時,需要機(jī)器進(jìn)行GLM部署,好多同學(xué)第一步就被勸退了,那么如何繞過這個步驟先學(xué)習(xí)LLM模型的應(yīng)用,對Langchain進(jìn)行快速上手?本片講解3個把LangChain跑起來
  • 微信語音大揭秘:為什么禁止轉(zhuǎn)發(fā)?

    大家好,我是你們的小米。今天,我要和大家聊一個有趣的話題:為什么微信語音不可以轉(zhuǎn)發(fā)?這是一個我們經(jīng)常在日常使用中遇到的問題,也是一個讓很多人好奇的問題。讓我們一起來揭開這
  • 一文搞定Java NIO,以及各種奇葩流

    大家好,我是哪吒。很多朋友問我,如何才能學(xué)好IO流,對各種流的概念,云里霧里的,不求甚解。用到的時候,現(xiàn)百度,功能雖然實現(xiàn)了,但是為什么用這個?不知道。更別說效率問題了~下次再遇到,
  • 當(dāng)家的盒馬,加速謀生

    來源 | 價值星球Planet作者 | 歸去來自己&ldquo;當(dāng)家&rdquo;的盒馬,開始加速謀生了。據(jù)盒馬官微消息,盒馬計劃今年開放生鮮供應(yīng)鏈,將其生鮮商品送往食堂。目前,盒馬在上海已經(jīng)與
  • iQOO 11S新品發(fā)布會

    iQOO將在7月4日19:00舉行新品發(fā)布會,推出杭州亞運會電競賽事官方用機(jī)iQOO 11S。
  • 到手價3099元起!iQOO Neo8 Pro今日首銷:安卓性能最強(qiáng)旗艦

    5月23日,iQOO如期舉行了新品發(fā)布會,全新的iQOO Neo8系列也正式與大家見面,包含iQOO Neo8和iQOO Neo8 Pro兩個版本,其中標(biāo)準(zhǔn)版搭載高通驍龍8+,而Pro版更
  • Counterpoint :OPPO雙旗艦戰(zhàn)略全面落地 高端產(chǎn)品銷量增長22%

    2023年6月30日,全球行業(yè)分析機(jī)構(gòu)Counterpoint Research發(fā)布的《中國智能手機(jī)高端市場白皮書》顯示,中國智能手機(jī)品牌正在尋求高質(zhì)量發(fā)展,中國高端智能
Top 主站蜘蛛池模板: 卫辉市| 江达县| 贵阳市| 迁西县| 拜城县| 浏阳市| 绥芬河市| 金溪县| 延吉市| 常宁市| 东阳市| 探索| 夹江县| 社会| 蕲春县| 历史| 启东市| 阳朔县| 化隆| 高密市| 兴文县| 玉门市| 黔西| 虎林市| 遂平县| 日土县| 棋牌| 兴隆县| 凤山市| 无极县| 海原县| 平昌县| 贵州省| 大丰市| 承德市| 武宁县| 辽宁省| 且末县| 漳州市| 高阳县| 凤凰县|