本篇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. ioctl函数详细说明(网络)

    ioctl 函数 本函数影响由fd 参数引用的一个打开的文件. #include<unistd.h> int ioctl( int fd, int request, .../* void ...

  2. 升级Chrome后无法打开网页

    最近升级了网站,发现很多普通网站Chrome 都打不开了....  IE  可以正常打开,很是郁闷,重启电脑都不行. chrome://net-internals/#dns 点击如下按钮 清楚DNS缓 ...

  3. 输入操作遇到unknown error: cannot focus element

    事件背景:写脚本遇到sendkey时报错unknown error: cannot focus element,仔细查了,元素定位什么的都没问题,通过js注入修改数据后,保存成功,但是再进入编辑状态查 ...

  4. LeetCode(20):有效的括号

    Easy! 题目描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭 ...

  5. ajax test

    (function ($) { function loadNode(obj){ obj.closest('.filter').find('.item').removeClass('select'); ...

  6. Linux性能优化之CPU优化(一)

    前言 何为性能优化?个人认为,性能优化是为了提高应用程序或系统能力为目的.那么如何才能实现对应用程序的性能调优呢?这里很设计到很多的内容,包括Linux内核.CPU架构以及Linux内核对资源的分配以 ...

  7. 013 jquery中关于表格行的增删问题

    1.程序 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <titl ...

  8. 格式化输出函数:printf 那些事 (C语言)

    printf函数提供格式化输出转换 函数包含在头文件  <stdio.h>  中 #include <stdio.h> ...... 函数的原型在头文件的声明为 _CRTIMP ...

  9. SQL中的坑

    一.where,group by,having --group by 和having 解释:前提必须了解sql语言中一种特殊的函数:聚合函数, 例如SUM, COUNT, MAX, AVG等.这些函数 ...

  10. 在Win10下搭建web服务器,使用本机IP不能访问,但是使用localhos或127.0.0.1可以正常访问的解决办法

    最近在在Win10下搭建web服务器,发现通过windows自带的浏览器win10 edge浏览器使用本机IP不能放问,但是使用localhos或127.0.0.1可以正常访问, 后来无意发现,使用w ...