.NET CORE 中使用AutoMapper進行物件對映
阿新 • • 發佈:2021-10-04
轉自:https://www.tnblog.net/15985459135/article/details/3521
AutoMapper
基於約定的物件-物件對映器。
AutoMapper使用流暢的配置API定義物件-物件對映策略。AutoMapper使用基於約定的匹配演算法將源值與目標值匹配。AutoMapper面向模型投影方案,以將複雜的物件模型展平為DTO和其他簡單物件,其設計更適合於序列化,通訊,訊息傳遞,或僅用於域和應用程式層之間的反腐敗層。
文件:https://automapper.readthedocs.io/en/latest/index.html
GitHub:
使用
Nuget安裝
- AutoMapper 不用下載這個。
- AutoMapper.Extensions.Microsoft.DependencyInjection//依賴注入AutoMapper,需要下載該包。
在Startup中新增AutoMapper
- publicvoidConfigureServices(IServiceCollectionservices)
- {
- services.AddMvc();
- //註冊AutoMapper
- service.AddAutoMapper(Assembly.GetAssembly(typeof(Startup)));
- }
建立AutoMapper對映規則
- publicclassAutoMapperConfigs:Profile
- {
- //新增你的實體對映關係.
- publicAutoMapperConfigs()
- {
- CreateMap<DBPoundSheet,PoundSheetViewModel>();
- CreateMap<PoundSheetViewModel,DBPoundSheet>();
- }
- }
- publicclassRegisterMapProfile:Profile
- {
- //新增你的實體對映關係和出參欄位
- publicRegisterMapProfile()
- {
- CreateMap<JToken,SchedulHeadViewModel>()
- .ForMember(dest=>dest.HospitalId,
- options=>options.MapFrom(c=>c.SelectToken("Hospital_ID")))
- .ForMember(dest=>dest.BranchId,
- options=>options.MapFrom(c=>c.SelectToken("Branch_ID")))
- .ForMember(dest=>dest.SchedulId,
- options=>options.MapFrom(c=>c.SelectToken("ScheduHeadID")));
- }
- }
講解:JToken類:原創 C# JToken類的使用,實現解析動態json資料、遍歷、查詢
在原來解析json資料是,一般都是用反序列化來實現json資料的解讀,這需要首先知道json資料的結構並且建立相應的類才能反序列化,一旦遇到動態的json資料,這種方法就不使用。
為了解決動態解析json資料,微軟有個Newtonsoft.Json封裝類十分好用,裡面的JToken直接實現ling查詢。
原文連結:https://blog.csdn.net/weixin_35830789/java/article/details/80514994
注意:對映的欄位和出參的欄位可以不同,但是要和WebApi需對映的欄位相同。
在 MapperConfig類裡配置自己的對映類-------這裡我看了個視訊,並不需要配置,這個dll會自動去找全部的profiles檔案
在服務實現層的建構函式中注入你的IMapper
- privatereadonlyIMapper_mapper;
- publicMedicalCardService(IMappermapper)
- {
- _mapper=mapper??thrownewArgumentNullException(nameof(mapper));
- }
單個物件轉換
- //typeof(model)="PoundSheetViewModel"
- DBPoundSheetdBPoundSheet=_mapper.Map<DBPoundSheet>(model);
集合物件轉換動態json資料
- varclient=_mapper.Map<CreateClientViewModel>(JsonConvert.DeserializeObject<JToken>(model.Data.DesToString(_options.EncryptKey,_options.EncryptIv)));
- returnclient;