AutoMapper(一)——實現資料契約和實體類之間的轉換

來源:互聯網
上載者:User

標籤:

 

        以前做過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(一)——實現資料契約和實體類之間的轉換

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.