本篇AutoMapper使用场景:

※ Decimal转换成String类型

※ 源数组转换成目标数组

※ 源中的集合(数组)属性转换成目标中的集合(数组)属性

※ 子类父类间的映射

Decimal转换成String类型

□ Domain model

public class Order

{

public decimal Amount { get; set; }

}

□ View  model

public class OrderListViewModel

{

public string Amount { get; set; }

}

□ 通过实现ValueFormatter<>,可以实现类型的转换

public class MoneyFormatter : ValueFormatter<decimal>

{

protected override string FormatValueCore(decimal value)

{

return value.ToString("C");

}

}

□ 映射配置

AddFormatter<MoneyFormatter>();

Mapper.CreateMap<Order, OrderListViewModel>();

□ 使用

public ActionResult Index()

{

var order = new Order {Amount = 85M};

var orderListViewModel = Mapper.Map<Order, OrderListViewModel>(order);

return View(orderListViewModel);

}

□ 要点

属性类型的转换,我们可以自定义ValueFormatter<>。

源数组转换成目标数组

□ Domain model

public class Source

{

public int Value { get; set; }

}

□ View model

public class Dest

{

public int Value { get; set; }

}

□ 映射配置

Mapper.CreateMap<Source, Dest>();

□ 使用

public ActionResult ArraySample()

{

var sourceArray = new[]

{

new Source{Value = 1},

new Source{Value = 5},

new Source{Value = 10}

};

var destArray = Mapper.Map<Source[], Dest[]>(sourceArray);

return View(destArray.ToList());

}

□ 要点

创建映射是单个类之间的映射,但可以根据源集合获取到目标集合。

源中的集合(数组)属性转换成目标中的集合(数组)属性

□ Domain model

public class Order1

{

private IList<Order1Line> _lineItems = new List<Order1Line>();

public Order1Line[] LineItems

{

get { return _lineItems.ToArray(); }

}

public void AddLineItem(Order1Line orderLine)

{

_lineItems.Add(orderLine);

}

}

public class Order1Line

{

public  int Quantity { get; set; }

}

□ View model

public class Order1Dto

{

public Order1LineDto[] LineItems { get; set; }

}

□ 映射配置

Mapper.CreateMap<Order1, Order1Dto>();

□ 使用

public ActionResult ArraySample1()

{

var order1 = new Order1();

order1.AddLineItem(new Order1Line(){Quantity =5});

order1.AddLineItem(new Order1Line(){Quantity = 15});

order1.AddLineItem(new Order1Line(){Quantity = 25});

var order1Dto = Mapper.Map<Order1, Order1Dto>(order1);

return View(order1Dto);

}

子类父类间的映射

//父类

public class Foo

{

public int Value { get; set; }

}

//子类

public class Bar : Foo

{

pubic int Value{get;set;}

}

public ActionResult JiCheng()

{

var source = new Bar() {Value = 5};

var dest = Mapper.Map<Bar, Foo>(source);

return View(dest);

}

□ 要点

继承关系类之间的映射不需要做映射配置

AutoMapper在MVC中的运用02-Decimal转String、集合、子父类映射的更多相关文章

  1. AutoMapper在MVC中的运用01-配置、使用、单元测试、举例

    MVC中,如果想在Domain Model和View Model之间建立映射,用AutoMapper是一个不错的选择.不仅如此,AutoMapper能在不同对象之间建立映射,比如string与int类 ...

  2. AutoMapper在MVC中的运用05-映射中的忽略、处理null、多种映射转换

    本篇AutoMapper使用场景: ※ 动态实现接口方法或属性 ※ 目标中的属性如果比源多,可以忽略多出的属性 ※ 目标有virtual属性,可忽略 ※ 目标属性值为null的解决办法 ※ int转s ...

  3. AutoMapper在MVC中的运用07-映射在订单场景的例子

    本文参考了Taswar Bhatti的博客,他写了<Instant AutoMapper>这本书.遗憾的是,这本电子版书在国内还买不到,也下载不到.也只能从他的有限几篇博文中来窥探一二了. ...

  4. AutoMapper在MVC中的运用03-字典集合、枚举映射,自定义解析器

    本篇AutoMapper使用场景: ※ 源字典集合转换成目标字典集合 ※ 枚举映射 ※ 自定义解析器 ※ 源中的复杂属性和Get...方法转换成目标属性 源字典集合转换成目标字典集合 □ Domain ...

  5. AutoMapper在MVC中的运用小结

    配置.单元测试.AOP注入 Decimal转换成String类型 源数组转换成目标数组 源中的集合(数组)属性转换成目标中的集合(数组)属性 子类父类间的映射 源字典集合转换成目标字典集合 枚举映射 ...

  6. AutoMapper在MVC中的运用06-一次性定义映射、复杂类型属性映射

    本篇AutoMapper使用场景: ※ 当源和目标具有同名的复杂类型属性.集合类型属性,这2种属性对应的类间也需建立映射 ※ 一次性定义好源和目标的所有映射 ※ 一次性定义好源和目标的所有映射,目标中 ...

  7. AutoMapper在MVC中的运用04-string映射各种类型、一个属性映射多个属性等

    本篇AutoMapper使用场景: ※ 类型转换,源string类型分别转换成int, DateTime,Type ※ 源和目标都包含复杂类型属性 ※ 把源中的一个属性映射到目标中的多个属性 类型转换 ...

  8. datagrid在MVC中的运用05-加入时间搜索条件,枚举填充下拉框

    本文主要来体验在搜索区域增加更多的搜索条件,主要包括: ※ 使用jQuery ui的datepicker显示时间,设置显示格式.样式. ※ 设置jQuery ui的onClose事件,使开始和结束时间 ...

  9. ADO.NET .net core2.0添加json文件并转化成类注入控制器使用 简单了解 iTextSharp实现HTML to PDF ASP.NET MVC 中 Autofac依赖注入DI 控制反转IOC 了解一下 C# AutoMapper 了解一下

    ADO.NET   一.ADO.NET概要 ADO.NET是.NET框架中的重要组件,主要用于完成C#应用程序访问数据库 二.ADO.NET的组成 ①System.Data  → DataTable, ...

随机推荐

  1. MySQL之EXPLAIN 执行计划详解

    explain 可以分析 select 语句的执行,即 MySQL 的“执行计划. 一.type 列 MySQL 在表里找到所需行的方式.包括(由左至右,由最差到最好): | All | index ...

  2. 你会使用super()吗?你确定你了解它吗?

    我们经常在类的继承当中使用super(), 来调用父类中的方法.例如下面: class A: def func(self): print('OldBoy') class B(A): def func( ...

  3. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) 的解决办法

    更换mysql数据目录后出现ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql ...

  4. Python api认证

    本节内容: 基本的api 升级的api 终极版api 环境:Djanao, 项目名:api_auto, app:api 角色:api端,客户端,黑客端 1.基本的api [api端] #api_aut ...

  5. 【PAT】1019 数字黑洞 (20)(20 分)

    1019 数字黑洞 (20)(20 分) 给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字.一直重复这样做, ...

  6. API的防重

    说说API的防重放机制 2017-03-20 18:19 by 轩脉刃, 685 阅读, 7 评论, 收藏, 编辑 说说API的防重放机制 我们在设计接口的时候,最怕一个接口被用户截取用于重放攻击.重 ...

  7. 【LOJ】#2531. 「CQOI2018」破解 D-H 协议

    题解 BSGS直接解出a和b来即可 代码 #include <bits/stdc++.h> #define fi first #define se second #define pii p ...

  8. Codeforces Round #257 (Div. 1) D - Jzzhu and Numbers 容斥原理 + SOS dp

    D - Jzzhu and Numbers 这个容斥没想出来... 我好菜啊.. f[ S ] 表示若干个数 & 的值 & S == S得 方案数, 然后用这个去容斥. 求f[ S ] ...

  9. Codeforces Round #440 (Div. 1, based on Technocup 2018 Elimination Round 2) C - Points, Lines and Ready-made Titles

    C - Points, Lines and Ready-made Titles 把行列看成是图上的点, 一个点(x, y)就相当于x行 向 y列建立一条边, 我们能得出如果一个联通块是一棵树方案数是2 ...

  10. HDU - 1525

    题意:给你两个数,a,b,有两个人轮流进行一次操作, 每次操作可以将大的数减去k倍的小的数,最后不能操作的人输了,问你谁赢了. 思路:我们可以用辗转相除法求出对于每一个状态可以改变几次,这样问题就变成 ...