首页 > 代码库 > AutoMapper(一)——实现数据契约和实体类之间的转换

AutoMapper(一)——实现数据契约和实体类之间的转换

 

        以前做过Object到Object的转换方法的封装,底层主要还是靠反射取值赋值+循环来实现的。最近在公司里维护旧系统,这个系统使用了WCF,当时就很好奇他们的数据契约到实体模型的转换时怎么做的,之后查看源码,发现他们居然是一个属性一个属性的赋值过来的,当时就给我雷到了,难道就没有人举得这个地方可以封装起来吗?

 

        据我目前了解,有三种方法可以实现这个实体类到实体类的转换过程,下面来简述下这三种方式。

 

       第一种,也是最简单的一种,是用list自带的转换方法,但是这种方法需要自己定义转换规则,写起来也挺麻烦的,所以当时只做了个小Demo给大家看,也没有提倡使用;

       第二种,就是用反射+泛型封装的方法,但是这种方法只能实现简单属性的转换,对于复杂对象的处理就会出现属性赋值方面的问题;

       第三种方法,就是使用微软封装的AutoMapper。

 

       接下来,本文主要简单介绍下AutoMapper的使用。

 

一,引入

 

    首先找到“程序包管理器控制台”:

 

技术分享

 

 

    然后输入:

 

        技术分享

 

 

之后使用的时候,还有加入如下using:

 

    

using AutoMapper;  //使用autoMapper需要引入此命名空间

 

 

  接下来我们来写两个类,并写出两个类具体是如何转换的:

 

   源类:

 

  

 public  class Student    {       public int ID;//ID       public string Name;//姓名       public string Sex;//性别    }

 

   目标类;

 

 

  public class StudentGoal    {        public int ID;//ID        public string Name;//姓名        public string Sex;//性别    }

 

 

接下来看看单个实体之间的转换和List之间的转换:

 

   #region 单个实体之间的转换Demo                //创建映射规则                Mapper.CreateMap<Student, StudentGoal>();                //创建一个源实体                Student StuScource = new Student                {                    ID = 1,                    Name = "lhc",                    Sex = "girl"                };                //进行转换:将源目标转换为目的目标                var sGoal = Mapper.Map<StudentGoal>(StuScource);                //输出转换后实体name                 Console.WriteLine(sGoal.Name);            #endregion            #region List之间的转换Demo                        //创建转换规则                    Mapper.CreateMap<Student, StudentGoal>();                    //创建源实体集合                    List<Student> ListScource = new List<Student>()                    {                        new Student() {ID=1,Name ="刘慧超",Sex ="女"},                        new Student() {ID=2,Name ="小七七",Sex ="女"}                    };                    //进行转换                    List<StudentGoal> ListGoal = Mapper.Map<List<Student>, List<StudentGoal>>(ListScource);                    //输出目标集合中学生姓名                    foreach (var stu in ListGoal )                    {                        Console.WriteLine(stu.Name);                    }            #endregion

 

 

 

    嘿嘿,感觉挺方便的吧~~

   

    这个只是个简单的使用,AutoMapper在实体转换方面做的还是挺成熟的,我们使用的时候,可以在此基础上再进一步封装。

 

AutoMapper(一)——实现数据契约和实体类之间的转换