博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AutoMapper简明教程(学习笔记)
阅读量:5996 次
发布时间:2019-06-20

本文共 7603 字,大约阅读时间需要 25 分钟。

 

       最近做项目,需要把DataTable中的数据强类型化.于是试用了下比较常用的AutoMapper,通过看代码中附带的Demo与网上的教程,也算能够勉强使用了,现将学习笔记记录如下:

 

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(
"
1
");
            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(
"
2
");
            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(
"
3
");
            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(
"
4
");
            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(
"
5
");
            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(
"
6
");
            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(
"
7
");
            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(
"
8
");
            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(
"
9
");
            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(
"
10
");
            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(
"
11
");
            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(
"
12
");
            Console.WriteLine(nameDto12[
0].FirstName + nameDto12[
0].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(
"
13
");
            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(
"
14
");
            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(
"
15
");
            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 + 
"
-
";
        }
    }
}

 

 

      比较遗憾的是现在还不支持将Directory转化为对象

      参考的文章:

  1. 6
    原文地址:http://www.cnblogs.com/ljzforever/archive/2011/12/29/2305500.html

 

转载于:https://www.cnblogs.com/wangyhua/p/automapper.html

你可能感兴趣的文章
Quickly Start Listener scripts
查看>>
Struts2返回JSON对象的方法总结
查看>>
期权只是一张纸而已,但它的背后是心机
查看>>
python基础——类和实例
查看>>
Git 常用的命令总结(欢迎收藏备用)
查看>>
gcc 编译错误之Clock skew detected
查看>>
大话程序猿眼里的高并发【转】
查看>>
Linux系统中“动态库”和“静态库”那点事儿【转】
查看>>
2 hive的使用 + hive的常用语法
查看>>
windows安装nginx部署
查看>>
面向对象(五)super
查看>>
Leetcode: Data Stream as Disjoint Intervals && Summary of TreeMap
查看>>
探索ASP.NET MVC5系列之~~~6.Session篇(进程外Session)
查看>>
C# HtmlElement的GetAttribute("class") return ""
查看>>
mysql ip转换函数
查看>>
Maven设置snapshot无法在远程仓库下载的问题解决
查看>>
vue 数据传递的方法
查看>>
linux watch 命令
查看>>
Spring Boot静态资源处理
查看>>
手把手带你打造一个 Android 热修复框架
查看>>