AutoMapper在MVC中的运用02-Decimal转String、集合、子父类映射
本篇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、集合、子父类映射的更多相关文章
- AutoMapper在MVC中的运用01-配置、使用、单元测试、举例
MVC中,如果想在Domain Model和View Model之间建立映射,用AutoMapper是一个不错的选择.不仅如此,AutoMapper能在不同对象之间建立映射,比如string与int类 ...
- AutoMapper在MVC中的运用05-映射中的忽略、处理null、多种映射转换
本篇AutoMapper使用场景: ※ 动态实现接口方法或属性 ※ 目标中的属性如果比源多,可以忽略多出的属性 ※ 目标有virtual属性,可忽略 ※ 目标属性值为null的解决办法 ※ int转s ...
- AutoMapper在MVC中的运用07-映射在订单场景的例子
本文参考了Taswar Bhatti的博客,他写了<Instant AutoMapper>这本书.遗憾的是,这本电子版书在国内还买不到,也下载不到.也只能从他的有限几篇博文中来窥探一二了. ...
- AutoMapper在MVC中的运用03-字典集合、枚举映射,自定义解析器
本篇AutoMapper使用场景: ※ 源字典集合转换成目标字典集合 ※ 枚举映射 ※ 自定义解析器 ※ 源中的复杂属性和Get...方法转换成目标属性 源字典集合转换成目标字典集合 □ Domain ...
- AutoMapper在MVC中的运用小结
配置.单元测试.AOP注入 Decimal转换成String类型 源数组转换成目标数组 源中的集合(数组)属性转换成目标中的集合(数组)属性 子类父类间的映射 源字典集合转换成目标字典集合 枚举映射 ...
- AutoMapper在MVC中的运用06-一次性定义映射、复杂类型属性映射
本篇AutoMapper使用场景: ※ 当源和目标具有同名的复杂类型属性.集合类型属性,这2种属性对应的类间也需建立映射 ※ 一次性定义好源和目标的所有映射 ※ 一次性定义好源和目标的所有映射,目标中 ...
- AutoMapper在MVC中的运用04-string映射各种类型、一个属性映射多个属性等
本篇AutoMapper使用场景: ※ 类型转换,源string类型分别转换成int, DateTime,Type ※ 源和目标都包含复杂类型属性 ※ 把源中的一个属性映射到目标中的多个属性 类型转换 ...
- datagrid在MVC中的运用05-加入时间搜索条件,枚举填充下拉框
本文主要来体验在搜索区域增加更多的搜索条件,主要包括: ※ 使用jQuery ui的datepicker显示时间,设置显示格式.样式. ※ 设置jQuery ui的onClose事件,使开始和结束时间 ...
- 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, ...
随机推荐
- IntelliJ IDEA 中安装junit插件
1.在Intellij IDEA 中安装了 Junit,TestNG插件,首先检查一下intellij IDEA 是否在安装时默认安装了这两个插件,检查方法 打开 settings -->Plu ...
- 使用Eclipse运行第一个Go程序
Windows 10家庭中文版,go version go1.11 windows/amd64, Eclipse IDE for C/C++ Developers Photon Release (4. ...
- python3 str.format()的使用
基本格式 {字段名!转换字段:格式说明符} 字段名:省略:数字:变量名 'name is {}, age is {}'.format('peter',25) 'name is {1}, age is ...
- laravel项目利用twemproxy部署redis集群的完整步骤
Twemproxy是一个代理服务器,可以通过它减少Memcached或Redis服务器所打开的连接数.下面这篇文章主要给大家介绍了关于laravel项目利用twemproxy部署redis集群的相关资 ...
- 浅谈SpringMVC
M--模型(实体vo[视图对象]与页面对面) V--视图(JSP,,velocity,FreeMarker,html,thymeleaf) C--控制器(servlet,if语句控制M数据跳转到V进行 ...
- 更换网页tab标题图标
在首页HTML文件中,加入link命令,<link>是放在<head>与</head>之间 例如下面这样: <HEAD><link rel = & ...
- ssh登录,Host key verification failed的几种处理方法
- 修订历史History: 2011.05.22 初稿 - 系统: Ubuntu 10.04LTS - 软件: SSH 使用SSH登录某台机器,有时因为server端的一些变动,会出现以下信 ...
- Taints和Tolerations联用,将pod部署到k8s的master节点
一般,k8s的master为了保持高性能,在这个主节点上只运行一些管理必须的POD. 如果我们限于资源,或是一些监控类的pod要部署到master节点呢? 昨天遇到这个问题,按网上通用的方法,未解决, ...
- 搭建项目vue + vue-router + vuex + vue-i18n + element-ui + egg + sequelize
vue + vue-router + vuex + vue-i18n + element-ui + egg + sequelize https://www.cnblogs.com/wuguanglin ...
- Web开发模式演变(转)
add by zhj:目前用的最多应该是模式二,其次是三.四,而模式五比较新,我自己也不太懂. 模式二--前后台交互的方式为整个页面,即每次请求,服务器都将HTML模板渲染后发给客户端,每次请求都返回 ...