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在實體轉換方面作的仍是挺成熟的,咱們使用的時候,能夠在此基礎上再進一步封裝。

相關文章
相關標籤/搜索