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在实体转换方面做的还是挺成熟的,我们使用的时候,可以在此基础上再进一步封装。

时间: 2024-10-11 16:50:05

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

XML文件与实体类之间的互相转换

二 序列化 XML文件与实体类的互相转换 一.将XML文件反序列化为实体类对象 1. 通常程序的配置信息都保存在程序或者网站的专门的配置文件中(App.config/web.config).但是现在为了演示XML序列化和反序列化,将配置信息保存在一个XML文件(config.xml)中,通过反序列化将配置信息读取出来保存到一个单独的类(Config.cs)中.这样如果需要用到配置信息,没必要每次都读写XML文件,只需要调用Config这个类就可以获取对应节点的信息. config.xml: <?

实体类之间属性对比的方法

分享一个实体类之间属性对比的方法 方法用途:对实体类的属性进行修改操作:如果当前修改操作与原先的实体类属性值一样则返回为true,无需进行修改操作:反之则进行修改操作: 参考连接:https://www.cnblogs.com/mollie-x/p/10569286.html import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import j

c++基类与派生类之间的转换

1 #include <iostream> 2 #include <string> 3 using namespace std; 4 class Box 5 { 6 public: 7 void setWidth(double width){ 8 this->width=width; 9 } 10 void setHieght(double height){ 11 this->height=height; 12 } 13 void getWidth(){ 14 cout

C++基类和派生类之间的转换

本文讲解内容的前提是派生类继承基类的方式是公有继承,关键字public 以下程序为讲解用例. 1 #include<iostream> 2 using namespace std; 3 4 class A 5 { 6 public: 7 A(int m1, int n1):m(m1), n(n1){} 8 void display(); 9 private: 10 int m; 11 int n; 12 }; 13 14 void A::display() 15 { 16 cout <&

类型转换,类与类之间的转换,继承关系,继承与静态变量,子类父类重名,多继承,虚基类

 常量的基本类型转换,例如:int num(10.8),这种方式是隐式转换. 通过函数的构造函数实现转换. 类类转换函数,当构造函数不能将类型转换成基本类型时.所以就有了类类转换函数,通过这种方式. 案例: #include <iostream> class fushu { public: //通过加explicit的这种方式避免隐式转换,避免引发歧义 explicit fushu(int num) { x = num; y = num; } void print() { std::cou

使用反射将DataTable的数据转成实体类

利用反射避免了硬编码出现的错误,但是实体类的属性名必须和数据库名字对应(相同) 1.利用反射把DataTable的数据写到单个实体类 1 /// <summary> 2 /// 利用反射把DataTable的数据写到单个实体类 3 /// </summary> 4 /// <typeparam name="T"></typeparam> 5 /// <param name="dtSource"></p

java中的xml与实体类之间的映射

实体类: 1 package xml; 2 3 import javax.xml.bind.annotation.XmlRootElement; 4 5 @XmlRootElement 6 public class User { 7 String name; 8 String english_name; 9 String age; 10 String sex; 11 String address; 12 String description; 13 public User(){} 14 15 p

.net 实体类与json转换(.net自带类库实现)

注意要点. 1.jsonhelp编写时候添加的引用.System.Runtime.Serialization.Json; 2.实体类需声明为public jsonhelp代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Runtime.Serialization.Json; usin

XML和实体类之间相互转换(序列化和反序列化)

我们需要在XML与实体类,DataTable,List之间进行转换,下面是XmlUtil类,该类来自网络并稍加修改. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67