本篇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映射各种类型、一个属性映射多个属性等的更多相关文章

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

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

  2. Taurus.MVC WebAPI 入门开发教程3:路由类型和路由映射。

    系列目录 1.Taurus.MVC WebAPI  入门开发教程1:框架下载环境配置与运行. 2.Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World. 3.Tau ...

  3. AutoMapper在MVC中的运用02-Decimal转String、集合、子父类映射

    本篇AutoMapper使用场景: ※ Decimal转换成String类型 ※ 源数组转换成目标数组 ※ 源中的集合(数组)属性转换成目标中的集合(数组)属性 ※ 子类父类间的映射 Decimal转 ...

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

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

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

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

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

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

  7. AutoMapper在MVC中的运用小结

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

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

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

  9. C++ Primer学习笔记2--c++标准库中的 vector、string 和 bitset 类型

    一.string    #include <string>  using std::string    初始化函数:    string s1;        默认构造函数 s1 为空串 ...

随机推荐

  1. WPF UI 开源专贴

    1.ReactiveUI https://github.com/reactiveui/ReactiveUI http://www.reactiveui.net A MVVM framework tha ...

  2. 001_软件waf

    一.优秀的软件waf开源软件 <1>openwaf介绍  http://www.oschina.net/p/openwaf http://git.oschina.net/miracleqi ...

  3. mysql索引 B+tree

    一.B+tree示意图 二.为什么要用索引 1.索引能极大减少存储引擎需要扫描的数据量:因为索引有序所以可以快速查找并且不用全表查找: 2.索引可以把随机IO变为顺序IO:因为B+tree在数据中保存 ...

  4. mysql 用init-connect+binlog实现用户操作追踪做access的ip的log记录

    在MYSQL中,每个连接都会先执行init-connect,进行连接的初始化.我们可以在这里获取用户的登录名称和thread的ID值.然后配合binlog,就可以追踪到每个操作语句的操作时间,操作人等 ...

  5. ECS Navicat for MySQL远程连接报10038的错误

    解决问题时,建议先在阿里云设置好数据库访问的白名单,把自己的IP地址填进去 问题现象 Navicat for MySQL访问远程mysql数据库,出现报错,显示“2003- Can't connect ...

  6. 墨刀 vs Axure RP

    https://www.jianshu.com/p/b4b9c1f15304 墨刀https://modao.cc/ Axure RP https://www.axure.com/https://ww ...

  7. ExpressMapper- The New .NET Mapper!

    推荐,据测试比手工映射的效率还高. https://www.codeproject.com/Tips/1009198/Expressmapper-The-New-NET-Mapper

  8. .NetCore下B/S结构 初探基于遗传学算法的中学自动排课走班(二)

    分析下染色体基因 这里用 老师 课程 班级 教室 周天 上下晚 课时作为染色体编码我封装了如下类 /// <summary> /// NP 授课事件 由教室.课程.班级 时间片段构成 li ...

  9. 利用word的VBA,为代码统一表格宽度,底色及行号

    如果文档中的代码表格时,感觉还是很快速有用的. Sub HangHao() ' ' hanghao 宏 ' ' Dim parag As Paragraph Dim nLineNum: nLineNu ...

  10. 浙江省“一卡通”异地就医,C#调用省一卡通动态库

    前言,最近学习调用 浙江省一卡通业务,主要就是调用一个DLL,动态库文件,这个动态库是浙大网新研发的. 借着自学的机会把心得体会都记录下来,方便感兴趣的小伙伴学习与讨论. 内容均系原创,欢迎大家转载分 ...