AutoMapper
基于约定的对象-对象映射器。
AutoMapper
使用流畅的配置API
定义对象-对象映射策略。AutoMapper
使用基于约定的匹配算法将源值与目标值匹配。AutoMapper
面向模型投影方案,以将复杂的对象模型展平为DTO
和其他简单对象,其设计更适合于序列化,通信,消息传递,或仅用于域和应用程序层之间的反腐败层。
官网:http://automapper.org/
文档:https://automapper.readthedocs.io/en/latest/index.html
使用
Nuget
安装
AutoMapper
AutoMapper.Extensions.Microsoft.DependencyInjection // 依赖注入AutoMapper,需要下载该包。
在Startup
中添加AutoMapper
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
//注册 AutoMapper
service.AddAutoMapper(Assembly.GetAssembly(typeof(Startup)));
}
创建AutoMapper
映射规则
public class AutoMapperConfigs:Profile
{
// 添加你的实体映射关系.
public AutoMapperConfigs()
{
CreateMap <DBPoundSheet, PoundSheetViewModel> ();
CreateMap <PoundSheetViewModel, DBPoundSheet> ();
}
}
public class RegisterMapProfile :Profile
{
//添加你的实体映射关系和出参字段
public RegisterMapProfile()
{
#region 排班信息
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
类的使用,实现解析动态json数据、遍历、查找
在原来解析json
数据是,一般都是用反序列化来实现json
数据的解读,这需要首先知道json
数据的结构并且建立相应的类才能反序列化,一旦遇到动态的json
数据,这种方法就不使用。
为了解决动态解析json
数据,微软有个Newtonsoft.Json
封装类十分好用,里面的JToken
直接实现linq
查询。
注意:映射的字段和出参的字段可以不同,但是要和WebApi
需映射的字段相同。
在 MapperConfig
类里配置自己的映射类
在服务实现层的构造函数中注入你的IMapper
private readonly IMapper _mapper;
public MedicalCardService( IMapper mapper)
{
_mapper = mapper ?? throw new ArgumentNullException(nameof(mapper));
}
单个对象转换
// typeof(model)="PoundSheetViewModel"
DBPoundSheet dBPoundSheet = _mapper.Map<DBPoundSheet>(model);
集合对象转换动态json数据
var client = _mapper.Map<CreateClientViewModel>(JsonConvert.DeserializeObject<JToken>(model.Data.DesToString(_options.EncryptKey, _options.EncryptIv)));
return client;