AutoMapper在MVC中的运用02

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

        }      


□ 要点


继承关系类之间的映射不需要做映射配置        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值