AutoMapper在MVC中的运用04-string映射各种类型、一个属性映射多个属性等
本篇AutoMapper使用场景:
※ 类型转换,源string类型分别转换成int, DateTime,Type
※ 源和目标都包含复杂类型属性
※ 把源中的一个属性映射到目标中的多个属性
类型转换,源string类型分别转换成int, DateTime,Type
□ Domain model
public class Source2
{
public string Value1 { get; set; }
public string Value2 { get; set; }
public string Value3 { get; set; }
}
□ View model
public class Destination2
{
public int Value1 { get; set; }
public DateTime Value2 { get; set; }
public Type Value3 { get; set; }
}
□ 派生TypeConverter<,>自定义转换
//string转换成DateTime类型
public class DateTimeTypeConverter : TypeConverter<string,DateTime>
{
protected override DateTime ConvertCore(string source)
{
return System.Convert.ToDateTime(source);
}
}
//string转换成Type类型
//当然,这里的string必须是当前项目下的某个类
public class TypeTypeConverter : TypeConverter<string, Type>
{
protected override Type ConvertCore(string source)
{
Type type = Assembly.GetExecutingAssembly().GetType(source);
return type;
}
}
□ 映射配置
Mapper.CreateMap<string, int>().ConvertUsing(Convert.ToInt32);
Mapper.CreateMap<string, DateTime>().ConvertUsing<DateTimeTypeConverter>();
Mapper.CreateMap<string,Type>().ConvertUsing<TypeTypeConverter>();
Mapper.CreateMap<Source2, Destination2>();
□ 要点
类型转换用Convertusing<>()方法
源和目标都包含复杂类型属性
□ Domain model
public class OuterSource
{
public int Value { get; set; }
public InnerSource Inner { get; set; }
}
public class InnerSource
{
public int OtherValue { get; set; }
}
□ View model
public class OuterDest
{
public int Value { get; set; }
public InnerDest Inner { get; set; }
}
public class InnerDest
{
public int OtherValue { get; set; }
}
□ 映射配置
Mapper.CreateMap<OuterSource, OuterDest>();
Mapper.CreateMap<InnerSource, InnerDest>();
□ 使用
public ActionResult Nest()
{
var source = new OuterSource()
{
Value = 5,
Inner = new InnerSource(){OtherValue = 15}
};
var dest = Mapper.Map<OuterSource, OuterDest>(source);
return View(dest);
}
□ 要点
当源和目标都具有复杂属性并对应,复杂属性对应的类也需要配置映射。
把源中的一个属性映射到目标中的多个属性
□ Domain model
public class CalendarEvent
{
public DateTime EventDate { get; set; }
public string Title { get; set; }
}
public class CalendarEventForm
{
public DateTime EventDate { get; set; }
public int EventHour { get; set; }
public int EventMinute { get; set; }
public string Title { get; set; }
}
□ 自定义解析器
//转换成DateTime.Date
public class DateTimeToDateResolver : ValueResolver<CalendarEvent, DateTime>
{
protected override DateTime ResolveCore(CalendarEvent source)
{
return source.EventDate.Date;
}
}
//转换成DateTime.Hour
public class DateTimeToHourResolver : ValueResolver<CalendarEvent, int>
{
protected override int ResolveCore(CalendarEvent source)
{
return source.EventDate.Hour;
}
}
//转换成DateTime.Minute
public class DateTimeToMinuteResolver : ValueResolver<CalendarEvent, int>
{
protected override int ResolveCore(CalendarEvent source)
{
return source.EventDate.Minute;
}
}
□ 映射配置
Mapper.CreateMap<CalendarEvent, CalendarEventForm>()
.ForMember("EventDate", opt => opt.ResolveUsing<DateTimeToDateResolver>())
.ForMember("EventHour", opt => opt.ResolveUsing<DateTimeToHourResolver>())
.ForMember("EventMinute", opt => opt.ResolveUsing<DateTimeToHourResolver>());
□ 使用
public ActionResult Projection()
{
var calendarEvent = new CalendarEvent
{
EventDate = new DateTime(2008, 12, 15, 20, 30, 0),
Title = "Company Holiday Party"
};
CalendarEventForm from = Mapper.Map<CalendarEvent, CalendarEventForm>(calendarEvent);
return View(from);
}
AutoMapper在MVC中的运用04-string映射各种类型、一个属性映射多个属性等的更多相关文章
- AutoMapper在MVC中的运用01-配置、使用、单元测试、举例
MVC中,如果想在Domain Model和View Model之间建立映射,用AutoMapper是一个不错的选择.不仅如此,AutoMapper能在不同对象之间建立映射,比如string与int类 ...
- Taurus.MVC WebAPI 入门开发教程3:路由类型和路由映射。
系列目录 1.Taurus.MVC WebAPI 入门开发教程1:框架下载环境配置与运行. 2.Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World. 3.Tau ...
- AutoMapper在MVC中的运用02-Decimal转String、集合、子父类映射
本篇AutoMapper使用场景: ※ Decimal转换成String类型 ※ 源数组转换成目标数组 ※ 源中的集合(数组)属性转换成目标中的集合(数组)属性 ※ 子类父类间的映射 Decimal转 ...
- AutoMapper在MVC中的运用07-映射在订单场景的例子
本文参考了Taswar Bhatti的博客,他写了<Instant AutoMapper>这本书.遗憾的是,这本电子版书在国内还买不到,也下载不到.也只能从他的有限几篇博文中来窥探一二了. ...
- AutoMapper在MVC中的运用05-映射中的忽略、处理null、多种映射转换
本篇AutoMapper使用场景: ※ 动态实现接口方法或属性 ※ 目标中的属性如果比源多,可以忽略多出的属性 ※ 目标有virtual属性,可忽略 ※ 目标属性值为null的解决办法 ※ int转s ...
- AutoMapper在MVC中的运用03-字典集合、枚举映射,自定义解析器
本篇AutoMapper使用场景: ※ 源字典集合转换成目标字典集合 ※ 枚举映射 ※ 自定义解析器 ※ 源中的复杂属性和Get...方法转换成目标属性 源字典集合转换成目标字典集合 □ Domain ...
- AutoMapper在MVC中的运用小结
配置.单元测试.AOP注入 Decimal转换成String类型 源数组转换成目标数组 源中的集合(数组)属性转换成目标中的集合(数组)属性 子类父类间的映射 源字典集合转换成目标字典集合 枚举映射 ...
- AutoMapper在MVC中的运用06-一次性定义映射、复杂类型属性映射
本篇AutoMapper使用场景: ※ 当源和目标具有同名的复杂类型属性.集合类型属性,这2种属性对应的类间也需建立映射 ※ 一次性定义好源和目标的所有映射 ※ 一次性定义好源和目标的所有映射,目标中 ...
- C++ Primer学习笔记2--c++标准库中的 vector、string 和 bitset 类型
一.string #include <string> using std::string 初始化函数: string s1; 默认构造函数 s1 为空串 ...
随机推荐
- OpenLayers 3 之 地图图层数据来源(ol.source)详解
原文地址 source 是 Layer 的重要组成部分,表示图层的来源,也就是服务地址.除了在构造函数中制定外,可以使用 layer.setSource(source) 稍后指定.一.包含的类型 ol ...
- 源码安装svn 1.8.9
2014年5月25日 12:26:14 需要文件: svn apr apr-util sqlite3 serf svn : http://subversion.apache.org/download/ ...
- 通过anaconda进行python多版本控制
---恢复内容开始--- linux与windows通用. 1. 假设电脑上已经转好anaconda3. (anaconda 默认装好了python3.jupyter.spyter) 2. 现在需求是 ...
- sublime text2快捷键
mac: command+option+f : 替换, find what: (.*) replace with:"$1": "1" 或者: data: ...
- 文件时间戳修改touch和查看stat和ls --time
查看文件时间戳命令:stat awk.txtFile: `awk.txt'Size: 20 Blocks: 8 IO Block: 4096 regular fileDevice: 801h/2 ...
- homestead 无法被局域网其他电脑局域网访问解决办法
修改(该文件就是通过git下载的homestead文件夹中的文件) homestead/scripts/homestead.rb # Configure A Private Network IP ...
- Redis学习笔记10--Redis主从复制
redis主从复制配置和使用都非常简单.通过主从复制可以允许多个slave server拥有和master server相同的数据库副本.下面是关于redis主从复制的一些特点: 1.ma ...
- 卡尔曼滤波(kalman)相关理论以及与HMM、最小二乘法关系
一.什么是卡尔曼滤波 在雷达目标跟踪中,通常会用到Kalman滤波来形成航迹,以前没有学过机器学习相关知识,学习Kalman时,总感觉公式看完就忘,而且很多东西云里雾里并不能深入理解,最后也就直接套那 ...
- Wannafly 22A
题解 另g = gcd(a1,a2,a3....) 那么k * g % m的方案书就是答案 这个式子子显然是有循环节的 x * g = 0 mod m ,x * g + y * m = 0 exgcd ...
- [HDU5713]K个联通块
[HDU5713]K个联通块 题目大意: 有一张\(n(n\le14)\)个点,\(m\)条边无重边的无向图,求有多少个边集,使得删掉边集里的边后,图里恰好有\(k\)个连通块. 思路: 一个显然的动 ...