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

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

        }      


□ 要点


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

你可能感兴趣的:(String)