AutoMapper类库是啥呢?从字面意思上来说是自动映射,用在哪儿呢?通常是用在将一个对象的字段映射到另外一个对象,比如我们用ORM读取的数据,我们不是直接用到UI层,而是需要转换成UI对应view对象读取出来,过程中需要繁琐的赋值。而AutoMapper就帮我们解决了这个问题。我们模拟读取过程, 如下案例:.
//ORM类模型
public class ORMModel
{
public int Id { get; set; }
public string Name { get; set; }
public bool Sex { set; get; }
}
public class ormcontext
{
//模拟上下文读取
public List<ORMModel> GetData()
{
List<ORMModel> list = new List<ORMModel>();
list.Add(new ORMModel() { Id = 1, Name = "张三", Sex = true });
list.Add(new ORMModel() { Id = 2, Name = "李四", Sex = false });
return list;
}
}
//前台UI模型
public class UIModel
{
public int Id { get; set; }
public string Name { get; set; }
public string Sex { set; get; }
}
//模拟读取到UI,徐转换成UIModel提供给前端shi用,如下,我们就不展示了
static void Main(string[] args)
{
List<ORMModel> olist = new ormcontext().GetData();
List<UIModel> ulist = new List<UIModel>();
foreach (var item in olist)
{
ulist.Add(new UIModel() { Id = item.Id, Name = item.Name, Sex = item.Sex == true ? "男" : "女" });
}
}
如果有AutoMapper就不需要使用循环,不需要一个字段一个字段赋值了,我这个例子只有三个字段,如果字段多了的话将比较头疼了。AutoMapper使用如下:
//模拟读取到UI
static void Main(string[] args)
{
//映射关系
MapperConfiguration configuration = new MapperConfiguration(cfg =>
{
cfg.CreateMap<ORMModel, UIModel>();
});
IMapper mapper = configuration.CreateMapper();//创建樱色
//映射直接的数据
List<UIModel> b = mapper.Map<List<UIModel>>(new ormcontext().GetData());
}
大家发现没有,这里有个问题,sex字段不同没有正确映射,怎么处理呢?有办法,只需要MapperConfiguration配置一下就可以了,如下代码:
//映射关系
MapperConfiguration configuration = new MapperConfiguration(cfg =>
{
cfg.CreateMap<ORMModel, UIModel>()
//处理字段转换问题
.ForMember(b=>b.Sex,a=>a.MapFrom(m=>m.Sex==false?"男":"女"));
});
cfg.CreateMap<int, string>().ConvertUsing<StringTypeConverter>();
这里我们把int类型转换成string类型,其中 StringTypeConverter是 .NET 自带的转换器,我们也可以自定义转换器。
结语
本文简单介绍了AutoMapper的使用,写作水平有限,欢迎大家斧正,同时欢迎大家留言交流。
希望本文对大家学习和工作有一定参考价值,谢谢大家的支持。