namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//1.普通转换
Name name1 = new Name() { FirstName = "L", LastName = "jz" };
Mapper.CreateMap<Name, NameDto>()
.BeforeMap((name, nameDto) => Console.WriteLine("hello world before"))
.AfterMap((name, nameDto) => Console.WriteLine("hello world after"));
NameDto nameDto1 = Mapper.Map<Name, NameDto>(name1);
Console.WriteLine("");
Console.WriteLine(nameDto1.FirstName + nameDto1.LastName);
Console.WriteLine();
//Console.ReadKey(); //整体设置
//2.整体即时转换
Mapper.Reset();
Name name2 = new Name() { FirstName = "L", LastName = "jz" };
Mapper.CreateMap<Name, NameDto>()
.ConstructUsing(name => new NameDto() { AllName = name.FirstName + name.LastName });
NameDto nameDto2 = Mapper.Map<Name, NameDto>(name2);
Console.WriteLine("");
Console.WriteLine(nameDto2.AllName);
Console.WriteLine();
//Console.ReadKey(); //3.整体通过TypeConverter类型转换
Mapper.Reset();
Name name3 = new Name() { FirstName = "L", LastName = "jz" };
Mapper.CreateMap<Name, NameDto>()
.ConvertUsing<NameConverter>();
NameDto nameDto3 = Mapper.Map<Name, NameDto>(name3);
Console.WriteLine("");
Console.WriteLine(nameDto3.AllName);
Console.WriteLine();
//Console.ReadKey(); //单属性设置
//4.属性条件转换
Mapper.Reset();
Name name4 = new Name() { FirstName = "L", LastName = "jz" };
Mapper.CreateMap<Name, NameDto>()
.ForMember(name => name.FirstName, opt => opt.Condition(name => !name.FirstName.Equals("l", StringComparison.OrdinalIgnoreCase)));
NameDto nameDto4 = Mapper.Map<Name, NameDto>(name4);
Console.WriteLine("");
Console.WriteLine(string.IsNullOrEmpty(nameDto4.FirstName));
Console.WriteLine();
//Console.ReadKey(); //5.属性忽略
Mapper.Reset();
Name name5 = new Name() { FirstName = "L", LastName = "jz" };
Mapper.CreateMap<Name, NameDto>()
.ForMember(name => name.FirstName, opt => opt.Ignore());
NameDto nameDto5 = Mapper.Map<Name, NameDto>(name5);
Console.WriteLine("");
Console.WriteLine(string.IsNullOrEmpty(nameDto5.FirstName));
Console.WriteLine();
//Console.ReadKey(); //6.属性转换
Mapper.Reset();
Name name6 = new Name() { FirstName = "L", LastName = "jz" };
Mapper.CreateMap<Name, NameDto>()
.ForMember(name => name.AllName, opt => opt.MapFrom(name => name.FirstName + name.LastName));
NameDto nameDto6 = Mapper.Map<Name, NameDto>(name6);
Console.WriteLine("");
Console.WriteLine(nameDto6.AllName);
Console.WriteLine();
//Console.ReadKey(); //7.属性通过ValueResolver转换
Mapper.Reset();
Name name7 = new Name() { FirstName = "L", LastName = "jz" };
Mapper.CreateMap<Name, StoreDto>()
.ForMember(storeDto => storeDto.Name, opt => opt.ResolveUsing<NameResolver>());
StoreDto store1 = Mapper.Map<Name, StoreDto>(name7);
Console.WriteLine("");
Console.WriteLine(store1.Name.FirstName + store1.Name.LastName);
Console.WriteLine();
//Console.ReadKey(); //8.属性填充固定值
Mapper.Reset();
Name name8 = new Name() { FirstName = "L", LastName = "jz" };
Mapper.CreateMap<Name, NameDto>()
.ForMember(name => name.AllName, opt => opt.UseValue<string>("ljzforever"));
NameDto nameDto8 = Mapper.Map<Name, NameDto>(name8);
Console.WriteLine("");
Console.WriteLine(nameDto8.AllName);
Console.WriteLine();
//Console.ReadKey(); //9.属性格式化
Mapper.Reset();
Name name9 = new Name() { FirstName = "L", LastName = "jz" };
Mapper.CreateMap<Name, NameDto>()
.ForMember(name => name.FirstName, opt => opt.AddFormatter<StringFormatter>());
NameDto nameDto9 = Mapper.Map<Name, NameDto>(name9);
Console.WriteLine("");
Console.WriteLine(nameDto9.FirstName);
Console.WriteLine();
//Console.ReadKey(); //10.属性null时的默认值
Mapper.Reset();
Name name10 = new Name() { FirstName = "L" };
Mapper.CreateMap<Name, NameDto>()
.ForMember(name => name.LastName, opt => opt.NullSubstitute("jz"));
NameDto nameDto10 = Mapper.Map<Name, NameDto>(name10);
Console.WriteLine("");
Console.WriteLine(nameDto10.LastName);
Console.WriteLine();
//Console.ReadKey(); //其它设置与特性
//11.转换匿名对象
Mapper.Reset();
object name11 = new { FirstName = "L", LastName = "jz" };
NameDto nameDto11 = Mapper.DynamicMap<NameDto>(name11);
Console.WriteLine("");
Console.WriteLine(nameDto11.FirstName + nameDto11.LastName);
Console.WriteLine();
//Console.ReadKey(); //12.转换DataTable
Mapper.Reset();
DataTable dt = new DataTable();
dt.Columns.Add("FirstName", typeof(string));
dt.Columns.Add("LastName", typeof(string));
dt.Rows.Add("L", "jz");
List<NameDto> nameDto12 = Mapper.DynamicMap<IDataReader, List<NameDto>>(dt.CreateDataReader());
Console.WriteLine("");
Console.WriteLine(nameDto12[].FirstName + nameDto12[].LastName);
Console.WriteLine();
//Console.ReadKey();
//emitMapper error
//List<NameDto> nameDto20 = EmitMapper.ObjectMapperManager.DefaultInstance.GetMapper<IDataReader, List<NameDto>>().Map(dt.CreateDataReader()); //13.转化存在的对象
Mapper.Reset();
Mapper.CreateMap<Name, NameDto>()
.ForMember(name => name.LastName, opt => opt.Ignore());
Name name13 = new Name() { FirstName = "L" };
NameDto nameDto13 = new NameDto() { LastName = "jz" };
Mapper.Map<Name, NameDto>(name13, nameDto13);
//nameDto13 = Mapper.Map<Name, NameDto>(name13);//注意,必需使用上面的写法,不然nameDto13对象的LastName属性会被覆盖
Console.WriteLine("");
Console.WriteLine(nameDto13.FirstName + nameDto13.LastName);
Console.WriteLine();
//Console.ReadKey(); //14.Flatten特性
Mapper.Reset();
Mapper.CreateMap<Store, FlattenName>();
Store store2 = new Store() { Name = new Name() { FirstName = "L", LastName = "jz" } };
FlattenName nameDto14 = Mapper.Map<Store, FlattenName>(store2);
Console.WriteLine("");
Console.WriteLine(nameDto14.NameFirstname + nameDto14.NameLastName);
Console.WriteLine();
//Console.ReadKey(); //15.将Dictionary转化为对象,现在还不支持
Mapper.Reset();
Mapper.CreateMap<Dictionary<string, object>, Name>();
Dictionary<string, object> dict = new Dictionary<string, object>();
dict.Add("FirstName", "L");
//Name name15 = Mapper.DynamicMap<Dictionary<string, object>, Name>(dict);
Name name15 = Mapper.Map<Dictionary<string, object>, Name>(dict);
Console.WriteLine("");
Console.WriteLine(name15.FirstName);
Console.WriteLine();
Console.ReadKey();
}
} public class Store
{
public Name Name { get; set; }
public int Age { get; set; }
} public class Name
{
public string FirstName { get; set; }
public string LastName { get; set; }
} public class StoreDto
{
public NameDto Name { get; set; }
public int Age { get; set; }
} public class NameDto
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string AllName { get; set; }
} public class FlattenName
{
public string NameFirstname { get; set; }
public string NameLastName { get; set; }
} public class NameConverter : TypeConverter<Name, NameDto>
{
protected override NameDto ConvertCore(Name source)
{
return new NameDto() { AllName = source.FirstName + source.LastName };
}
} public class NameResolver : ValueResolver<Name, NameDto>
{
protected override NameDto ResolveCore(Name source)
{
return new NameDto() { FirstName = source.FirstName, LastName = source.LastName };
}
} public class NameFormatter : ValueFormatter<NameDto>
{
protected override string FormatValueCore(NameDto name)
{
return name.FirstName + name.LastName;
}
} public class StringFormatter : ValueFormatter<string>
{
protected override string FormatValueCore(string name)
{
return name + "-";
}
}
}

AutoMapper实现对象转换的几种方式的更多相关文章

  1. C# 对象与JSON字符串互相转换的三种方式

    C# 对象与JSON字符串互相转换的三种方式 JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式. 关于内存对象和JSON字符串的相互转换, ...

  2. JSON字符串互相转换的三种方式和性能比较

    C# 对象与JSON字符串互相转换的三种方式 JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式. 关于内存对象和JSON字符串的相互转换, ...

  3. Java中对象拷贝的两种方式

    引用的拷贝 //引用拷贝 private static void copyReferenceObject(){ Person p = new Person(23, "zhang") ...

  4. Java反射02 : Class对象获取的三种方式和通过反射实例化对象的两种方式

    1.Class对象获取的三种方式 本文转载自:https://blog.csdn.net/hanchao5272/article/details/79361463 上一章节已经说过,一般情况下,Jav ...

  5. 检测对象类型的两种方式,constructor属性和instanceof

    //本例是为了记录检测对象类型的两种方式,即constructor属性和instanceof操作符.详见<高三>P145        function Person(name, age, ...

  6. Kubernetes 对象管理的三种方式

    Kubernetes 中文文档 1. Kubernetes 对象管理的三种方式对比 Kubernetes 中的对象管理方式,根据对象配置信息的位置不同可以分为两大类: 命令式:对象的参数通过命令指定 ...

  7. JS对象创建的几种方式整理

    ​ 本文主要介绍了JS对象创建的几种方式 第一种:Object构造函数创建 var Person = new Object(); Person.name = 'Nike'; Person.age = ...

  8. word HTML文件与Markdwon互相转换的几种方式

    Tip:word文件与Markdwon转换往往是可逆的.无论使用哪种方式,要想完美转换,必须要预先处理掉markdown与word不兼容的格式,如word文件对象,带边框的代码块等等 方法一:借助pa ...

  9. 【转】java中byte数组与int类型的转换(两种方式)----不错

    原文网址:http://blog.csdn.net/piaojun_pj/article/details/5903009 java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法, ...

随机推荐

  1. 【Tools】-NO.93.Tools.5.pyCharm-【pyCharm 安装与破解配置】-

    1.0.0 Summary Tittle:[Tools]-NO.93.Tools.5.pyCharm-[pyCharm 安装与破解配置]- Style:Tools Series:Tools Since ...

  2. Tomcat服务安全加固

    Tomcat服务默认启用了管理后台功能,使用该后台可直接上传 war 文件包对站点进行部署和管理.由于运维人员的疏忽,可能导致管理后台存在空口令或者弱口令的漏洞,使得黑客或者不法分子可以利用该漏洞直接 ...

  3. 2.jQuery介绍

    . jQuery的认识 jQuery的核心特性可以总结为:具有独特的链式语法和短小清晰的多功能接口:具有高效灵活的css选择器,并且可对CSS选择器进行扩展:拥有便捷的插件扩展机制和丰富的插件. 和原 ...

  4. to_date

    SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'; 会话已更改. SQL> SELECT TO_DATE(' ...

  5. Reading Lines from File in C++

    Reading Lines from File in C++ In C++, istringstream has been used to read lines from a file. code: ...

  6. 使用redis做分布式锁

    1.使用setnx命令.先看下官方文档http://redis.cn/commands/setnx.html 2.使用getset命令.先获取,再set 实现案例: * create 2018-12- ...

  7. 整型 布尔值 字符串 for循环

    1.整型 2.布尔值 3.字符串 4.for循环 1.整型:.python中有长整型, Python3中只有整型 2.布尔值: bool:Ture 真       False 假 数字和布尔值可进行转 ...

  8. Codeforces 939C - Convenient For Everybody

    2018-03-03 http://codeforces.com/problemset/problem/939/C C. Convenient For Everybody time limit per ...

  9. JPA使用指南 javax.persistence的注解配置讲解

    转自http://67566894.iteye.com/blog/659829 示例 @SuppressWarnings("serial") @Entity @Table(name ...

  10. SAP Fiori Client

    iPhone资源->iPhone商务软件 SAP Fiori Client 固件要求:需要 iOS 9.0 或更高版本.与 iPhone.iPad 和 iPod touch 兼容. 利用适用于 ...