1. 程式人生 > 其它 >.NET CORE 中使用AutoMapper進行物件對映

.NET CORE 中使用AutoMapper進行物件對映

轉自:https://www.tnblog.net/15985459135/article/details/3521

AutoMapper

基於約定的物件-物件對映器。

AutoMapper使用流暢的配置API定義物件-物件對映策略。AutoMapper使用基於約定的匹配演算法將源值與目標值匹配。AutoMapper面向模型投影方案,以將複雜的物件模型展平為DTO和其他簡單物件,其設計更適合於序列化,通訊,訊息傳遞,或僅用於域和應用程式層之間的反腐敗層。

官網:http://automapper.org/

文件:https://automapper.readthedocs.io/en/latest/index.html

GitHub:

https://github.com/AutoMapper/AutoMapper/blob/master/docs/index.rst

使用

Nuget安裝

  1. AutoMapper 不用下載這個。
  2. AutoMapper.Extensions.Microsoft.DependencyInjection//依賴注入AutoMapper,需要下載該包。

在Startup中新增AutoMapper

  1. publicvoidConfigureServices(IServiceCollectionservices)
  2. {
  3. services.AddMvc();
  4. //註冊AutoMapper
  5. service.AddAutoMapper(Assembly.GetAssembly(typeof(Startup)));
  6. }

建立AutoMapper對映規則

  1. publicclassAutoMapperConfigs:Profile
  2. {
  3. //新增你的實體對映關係.
  4. publicAutoMapperConfigs()
  5. {
  6. CreateMap<DBPoundSheet,PoundSheetViewModel>();
  7. CreateMap<PoundSheetViewModel,DBPoundSheet>();
  8. }
  9. }
  10. publicclassRegisterMapProfile:Profile
  11. {
  12. //新增你的實體對映關係和出參欄位
  13. publicRegisterMapProfile()
  14. {
  15. #region排班資訊
  16. CreateMap<JToken,SchedulHeadViewModel>()
  17. .ForMember(dest=>dest.HospitalId,
  18. options=>options.MapFrom(c=>c.SelectToken("Hospital_ID")))
  19. .ForMember(dest=>dest.BranchId,
  20. options=>options.MapFrom(c=>c.SelectToken("Branch_ID")))
  21. .ForMember(dest=>dest.SchedulId,
  22. options=>options.MapFrom(c=>c.SelectToken("ScheduHeadID")));
  23. }
  24. }

講解: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

  1. privatereadonlyIMapper_mapper;
  2. publicMedicalCardService(IMappermapper)
  3. {
  4. _mapper=mapper??thrownewArgumentNullException(nameof(mapper));
  5. }

單個物件轉換

  1. //typeof(model)="PoundSheetViewModel"
  2. DBPoundSheetdBPoundSheet=_mapper.Map<DBPoundSheet>(model);

集合物件轉換動態json資料

  1. varclient=_mapper.Map<CreateClientViewModel>(JsonConvert.DeserializeObject<JToken>(model.Data.DesToString(_options.EncryptKey,_options.EncryptIv)));
  2. returnclient;