日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

【C#/.NET】不用AutoMapper,我用啥呢?

發(fā)布時間:2023/12/4 C# 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C#/.NET】不用AutoMapper,我用啥呢? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

微信公眾號:趣編程ACE
關(guān)注可了解更多的.NET日常實戰(zhàn)開發(fā)技巧。如需源碼請后臺留言源碼;
**[如果覺得對您有幫助,歡迎關(guān)注]

TinyMapper簡介

本文來自社區(qū)群粉絲投稿

TinyMapper是一個.NET平臺下的一個輕量級對象映射工具,號稱是.Net平臺下最快的對象映射組件,性能是AutoMapper的6倍。今天我們來在.Net6下演示如何快速使用這個組件。

官網(wǎng)地址:http://tinymapper.net/

安裝

1.新建一個Web Api項目

2.安裝Nuget包

創(chuàng)建實體以及映射類型

1.新建一個Model類,里面包括數(shù)據(jù)庫實體和DTO

namespace?TinymapperDemo.Models {///?<summary>///?數(shù)據(jù)庫實體DTO///?</summary>public?class?PersonDto?{public?string??Name?{?get;?set;?}public?string??Address?{?get;?set;?}public?string??Phone?{?get;?set;?}}///?<summary>///?數(shù)據(jù)庫實體?用的?record?類型標記///?</summary>///?<param?name="Id"></param>///?<param?name="UserName"></param>///?<param?name="City"></param>///?<param?name="Street"></param>///?<param?name="Phone"></param>public?record?Person(int?Id,string?UserName,string?City,string?Street,string?Phone);}

從數(shù)據(jù)庫獲取實體數(shù)據(jù)

新建一個UserManger類,代替?zhèn)}儲模擬從數(shù)據(jù)庫獲取實體數(shù)據(jù)

public?class?UserManage?:?IUserManage {///?<summary>///?模擬從數(shù)據(jù)庫獲取數(shù)據(jù)///?</summary>///?<returns></returns>public?Person[]?GetPerson(){return?new[]?{new?Person(1,"Jarry","Suzhou","Guan?qian","1232322323"),new?Person(1,"Test","Suzhou","Shan?tang","3232324332")};} }namespace?TinymapperDemo.Services {public?interface?IUserManage{Person[]?GetPerson();} }

服務(wù)獲取

生成UserService服務(wù),提供給API接口調(diào)用

namespace?TinymapperDemo.Services {public?class?UserService:IUserService{private?readonly?IUserManage?userManage;public?UserService(IUserManage?userManage){this.userManage?=?userManage;}public?PersonDto?GetPersonDto(string?name){var?persons?=?userManage.GetPerson();var?model?=persons.FirstOrDefault(f?=>?f.UserName.IndexOf(name)?>=?0);//?常規(guī)轉(zhuǎn)化方法如下//return?new?PersonDto()//{//????Name?=?model?.UserName,//????Address?=?model?.City?+?model?.Street,//????Phone?=?model?.Phone//};//??使用TinyMapper?轉(zhuǎn)化?//?除了下面這步轉(zhuǎn)化呢??還需要再Program.cs?里面配置一下??TinyMapper.Bind<Person,?PersonDto>();??//?必不可省return?TinyMapper.Map<PersonDto>(model);}}public?interface?IUserService{PersonDto?GetPersonDto(string?name);} }

服務(wù)注冊

builder.Services.AddSingleton<IUserManage,?UserManage>();??//?注冊倉儲 builder.Services.AddSingleton<IUserService,?UserService>();??//?注冊服務(wù)TinyMapper.Bind<Person,?PersonDto>();??//?必不可省

額外用法

1:對于TinyMapper簡單類轉(zhuǎn)化用法,我們可以手動配置,比如:

//?Person?為實體??PersonDto?為Dto?實體轉(zhuǎn)化到Dto? TinyMapper.Bind<Person,?PersonDto>(c?=>{c.Ignore(f?=>?f.Id);??//?忽略字段c.Bind(s?=>?s.UserName,?d?=>?d.Name);c.Bind(s?=>?s.City,?d?=>?d.Address);c.Bind(s?=>?s.Phone,?d?=>?d.Phone);} );

2.對于復雜字段,我們可以自定義轉(zhuǎn)化配置:用法如下:
首先新建一個轉(zhuǎn)化類:CustomConveter 繼承TypeConverter這個抽象類。

public?class?CustomConveter:?TypeConverter?{}

接著重寫兩個基方法 CanConvertTo ConvertTo

public?class?CustomConveter:?TypeConverter{public?override?bool?CanConvertTo(ITypeDescriptorContext??context,?Type??destinationType){return?destinationType==?typeof(PersonDto);}public?override?object??ConvertTo(ITypeDescriptorContext??context,?CultureInfo??culture,?object??value,?Type?destinationType){var?conveterValue?=?value?as?Person;var?personDto?=?new?PersonDto{Address?=?conveterValue?.City?+?conveterValue?.Street,??//?地址拼接為?城市+街道的形式Phone?=?conveterValue?.Phone,Name?=?conveterValue?.UserName};return?personDto;}}

最后我們在實體類上綁上上面寫好的自定義轉(zhuǎn)化特性

[TypeConverter(typeof(CustomConveter))]public?record?Person(int?Id,string?UserName,string?City,string?Street,string?Phone);

大功告成。。。。。。以上就是官網(wǎng)演示的方法,我在.Net6 平臺上面復現(xiàn)了一下,感謝觀閱!

總結(jié)

以上是生活随笔為你收集整理的【C#/.NET】不用AutoMapper,我用啥呢?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。