zoukankan      html  css  js  c++  java
  • 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);

            }      


    □ 要点


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

  • 相关阅读:
    CompareUtil
    linux awk学习笔记
    linux用grep查找包含两个关键字的命令
    mysql 使用set names 解决乱码问题
    对私有静态方法进行单测
    使用JUnit测试预期异常
    Tortoise svn 冲突解决主要办法
    tortoise svn冲突解决
    word-break与word-wrap
    移动端适配
  • 原文地址:https://www.cnblogs.com/darrenji/p/3570477.html
Copyright © 2011-2022 走看看