C#对象映射器之Mapster
生活随笔
收集整理的這篇文章主要介紹了
C#对象映射器之Mapster
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡介
Mapster是一個快,小巧,功能強大的對象映射.Net框架
例子
我有兩個Model類且他們的屬性一致,我們將 SourceObjectTest賦值給DestObjectTest該怎么做?
SourceObjectTest?sourceObject?=?new?SourceObjectTest(); sourceObject.Name?=?"張三"; sourceObject.Age?=?new?List<int>?{?20,?13,?26?}; sourceObject.Address?=?"XX省XX市XX縣"; sourceObject.Sex?=?"男";常規做法
public?void?Routine(SourceObjectTest?sourceObject) { DestObjectTest?destObject?=?new?DestObjectTest();destObject.Name?=?sourceObject.Name; destObject.Sex?=?sourceObject.Sex; destObject.Address?=?sourceObject.Address; destObject.Age?=?sourceObject.Age; }這種類型的代碼寫起來相當枯燥乏味且累那么我們可不可以用第三方的庫來解決這種問題呢,那肯定是可以的,像AutoMapper和Mapster就是解決這種問題的,而我為什么選擇Mapster,主要還是Mapster性能更好!
安裝Mapster包
使用Mapster
基本映射之映射到新對象
public?void?BasicMappingNewObject(SourceObjectTest?sourceObject){DestObjectTest?destObject=?sourceObject.Adapt<DestObjectTest>();}基本映射之映射到現有對象
public?void?BasicMappingExistObject(SourceObjectTest?sourceObject){DestObjectTest?destObject?=?new?DestObjectTest();destObject.Name?=?"李四";destObject.Age?=?new?List<int>?{?20?};destObject.Address?=?"中國XX省XX市XX縣";destObject.Sex?=?"女";????destObject?=?sourceObject.Adapt(destObject);}自定義映射
當我們的映射對象的屬性與源對象的屬性不一致時我們就可以使用!eg:SourceObjectTest的name屬性和DifferentDestObjectTest的UserName是一個意思,只是創建Model類的時候取得名字不一樣,這時候基本映射映射不了UserName字段,那我們就要使用自定義映射了!
一:直接在 TypeAdapterConfig 配置對象的映射關系
public?void?BasicMappingExtend(SourceObjectTest?sourceObject) { var?config?=?new?TypeAdapterConfig(); config.ForType<SourceObjectTest,?DifferentDestObjectTest>().Map(dest?=>?dest.UserName,?src?=>?src.Name).Map(dest?=>?dest.Address,?src?=>?src.Name?+?src.Address); var?mapper?=?new?Mapper(config);DifferentDestObjectTest?differentDestObjectTest?=?mapper.Map<DifferentDestObjectTest>(sourceObject); }二:使用接口的方式
public?class?DifferentDestObjectTestRegister?:?IRegister{public?void?Register(TypeAdapterConfig?config){config.ForType<SourceObjectTest,?DifferentDestObjectTest>().Map(dest?=>?dest.UserName,?src?=>?src.Name).Map(dest?=>?dest.Address,?src?=>?src.Name?+?src.Address);}}public?void?BasicMappingExtend(SourceObjectTest?sourceObject){var?config?=?new?TypeAdapterConfig();config.Scan(Assembly.GetExecutingAssembly());var?mapper?=?new?Mapper(config);DifferentDestObjectTest?differentDestObjectTest?=?mapper.Map<DifferentDestObjectTest>(sourceObject);}三:使用映射配置
public?void?MappingConfig(SourceObjectTest?sourceObject){TypeAdapterConfig<SourceObjectTest,?DifferentDestObjectTest>.NewConfig().Map(dest?=>?dest.UserName,src?=>?src.Name);DifferentDestObjectTest?differentDestObjectTest?=?TypeAdapter.Adapt<SourceObjectTest,?DifferentDestObjectTest>(sourceObject);}當然還有其它功能,可前往官網!-?傳送門!
最后大家如果喜歡我的文章,還麻煩給個關注并點個贊, 希望net生態圈越來越好!
總結
以上是生活随笔為你收集整理的C#对象映射器之Mapster的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GitHub Copilot 现已登陆
- 下一篇: 如何从一个 C# 的 dump 中挖到机