AutoMapper在MVC中的運用02-Decimal轉String、集合、子父類對映

Darren Ji發表於2014-02-26

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

        }      


□ 要點


繼承關係類之間的對映不需要做對映配置        

相關文章