博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AutoMapper在MVC中的运用04-string映射各种类型、一个属性映射多个属性等
阅读量:6507 次
发布时间:2019-06-24

本文共 3330 字,大约阅读时间需要 11 分钟。

本篇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);

        }

转载地址:http://uowfo.baihongyu.com/

你可能感兴趣的文章
使用C#生成随机密码(纯数字或字母)和随机卡号(数字与字母组合)
查看>>
CAS服务器端集群
查看>>
Android内存泄漏的常见场景及解决方案
查看>>
设计模式 之 访问者模式
查看>>
EasyUI datagrid隐藏<thead>表头
查看>>
用JS获取地址栏参数的方法
查看>>
JAVA Collections框架
查看>>
更改Windwos server 2003 域用户密码策略默认配置
查看>>
网站白名单可行性分析
查看>>
Ruby && Rails开发资源
查看>>
进制转换
查看>>
反转字符串中的单词
查看>>
html与html5的一些区别
查看>>
新博客地址
查看>>
ORACLE数据库中查找重复数据
查看>>
ASCII码
查看>>
java常用四种排序源代码
查看>>
win7 下硬盘安装Redhat7
查看>>
Configuring Zookeeper Cluster
查看>>
js图表控件:highcharts的应用
查看>>