.NET Core类库AutoMapper的简单使用

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?"男":"女"));   });
ForMember委托还有几个用法如下:
.MapFrom() 从数据中直接手动映射字段并可以设置逻辑;
.AllowNull() 可以设置空值;
.Condition() 有条件地映射;
.ConvertUsing() 可以类型转换;
我们再列举一下ConvertUsing的使用,如下:
 cfg.CreateMap<int, string>().ConvertUsing<StringTypeConverter>();

 这里我们把int类型转换成string类型,其中 StringTypeConverter是 .NET 自带的转换器,我们也可以自定义转换器。

其它详细使用请查看官方git:
https://github.com/AutoMapper/AutoMapper

结语

    本文简单介绍了AutoMapper的使用,写作水平有限,欢迎大家斧正,同时欢迎大家留言交流。

    希望本文对大家学习和工作有一定参考价值,谢谢大家的支持。