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

 

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

 

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

 

       第一种,也是最简单的一种,是用list自带的转换方法,可是这种方法须要本身定义转换规则,写起来也挺麻烦的,因此当时只作了个小Demo给你们看,也没有提倡使用;对象

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

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

 

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

 

一,引入

 

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

 

 

 

    而后输入:io

 

       

 

 

以后使用的时候,还有加入以下using:class

 

    

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在实体转换方面作的仍是挺成熟的,咱们使用的时候,能够在此基础上再进一步封装。

相关文章
相关标签/搜索