【C#/.NET】不用AutoMapper,我用啥呢?
生活随笔
收集整理的這篇文章主要介紹了
【C#/.NET】不用AutoMapper,我用啥呢?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
微信公眾號:趣編程ACE
關注可了解更多的.NET日常實戰開發技巧。如需源碼請后臺留言源碼;
**[如果覺得對您有幫助,歡迎關注]
TinyMapper簡介
本文來自社區群粉絲投稿
TinyMapper是一個.NET平臺下的一個輕量級對象映射工具,號稱是.Net平臺下最快的對象映射組件,性能是AutoMapper的6倍。今天我們來在.Net6下演示如何快速使用這個組件。
安裝
1.新建一個Web Api項目
2.安裝Nuget包
創建實體以及映射類型
1.新建一個Model類,里面包括數據庫實體和DTO
namespace?TinymapperDemo.Models {///?<summary>///?數據庫實體DTO///?</summary>public?class?PersonDto?{public?string??Name?{?get;?set;?}public?string??Address?{?get;?set;?}public?string??Phone?{?get;?set;?}}///?<summary>///?數據庫實體?用的?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);}從數據庫獲取實體數據
新建一個UserManger類,代替倉儲模擬從數據庫獲取實體數據
public?class?UserManage?:?IUserManage {///?<summary>///?模擬從數據庫獲取數據///?</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();} }服務獲取
生成UserService服務,提供給API接口調用
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);//?常規轉化方法如下//return?new?PersonDto()//{//????Name?=?model?.UserName,//????Address?=?model?.City?+?model?.Street,//????Phone?=?model?.Phone//};//??使用TinyMapper?轉化?//?除了下面這步轉化呢??還需要再Program.cs?里面配置一下??TinyMapper.Bind<Person,?PersonDto>();??//?必不可省return?TinyMapper.Map<PersonDto>(model);}}public?interface?IUserService{PersonDto?GetPersonDto(string?name);} }服務注冊
builder.Services.AddSingleton<IUserManage,?UserManage>();??//?注冊倉儲 builder.Services.AddSingleton<IUserService,?UserService>();??//?注冊服務TinyMapper.Bind<Person,?PersonDto>();??//?必不可省額外用法
1:對于TinyMapper簡單類轉化用法,我們可以手動配置,比如:
//?Person?為實體??PersonDto?為Dto?實體轉化到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.對于復雜字段,我們可以自定義轉化配置:用法如下:
首先新建一個轉化類: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;}}最后我們在實體類上綁上上面寫好的自定義轉化特性
[TypeConverter(typeof(CustomConveter))]public?record?Person(int?Id,string?UserName,string?City,string?Street,string?Phone);大功告成。。。。。。以上就是官網演示的方法,我在.Net6 平臺上面復現了一下,感謝觀閱!
總結
以上是生活随笔為你收集整理的【C#/.NET】不用AutoMapper,我用啥呢?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Blog.Core开源】将Progra
- 下一篇: .NET 为大型应用接入 Applica