开源项目 07 AutoMapper

 原文:https://www.cnblogs.com/zinan/p/10629277.html

 AutoMapper的版本:7.0.1

映射的时候忽略掉某些字段:

Mapper.Initialize(x =>
{
    x.CreateMap<tb_Projects, ProjectDto>().ForMember(dest => dest.isParent, opt => opt.Ignore());
});
using AutoMapper;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp2.test1
{
    public class Class7
    {
        //原文:https://www.cnblogs.com/mushroom/p/4291975.html

        public void test1()
        {
            //demo中的不可用
            //Mapper.CreateMap<Order, OrderDto>();

            //CreateMap应该是要写到Global.asax文件里面的
            Mapper.Initialize(x =>
            {
                x.CreateMap<Order, OrderDto>();
            });

            //验证配置是否有效,无效会抛出异常:
            Mapper.AssertConfigurationIsValid();


            var order = new Order();
            order.Name = "order1";

            var customer = new Customer
            {
                Name = "customer1"
            };

            order.Customer = customer;


            //匹配规则:
            //  名称相同的属性进行映射,不区分大小写。
            //  带Get前缀的方法进行映射,如例子中:
            //      映射器会把Order中的GetTotal分割成Get、Total 2个词, 把分割出来的Total与OrderDto中的Order进行匹配映射。
            //  目标类型属性分割,如例子中:
            //      映射器会把OrderDto中的CustomerName分割成Customer、Name。然后在Order中去Customer类属性中查找Name的属性。
            OrderDto dto = Mapper.Map<OrderDto>(order);


            Console.WriteLine(JsonConvert.SerializeObject(dto));
        }


        public void test2()
        {
            // 源对象
            var calendarEvent = new CalendarEvent
            {
                Date = new DateTime(2008, 12, 15, 20, 30, 0),
                Title = "假期公司聚会"
            };

            // 配置AutoMapper。dest是目标表达式。opt是源表达式
            Mapper.Initialize(x =>
            {
                x.CreateMap<CalendarEvent, CalendarEventForm>()
                .ForMember(dest => dest.EventDate, opt => opt.MapFrom(src => src.Date.Date))
                .ForMember(dest => dest.EventHour, opt => opt.MapFrom(src => src.Date.Hour))
                .ForMember(dest => dest.EventMinute, opt => opt.MapFrom(src => src.Date.Minute));
            });


            // 执行映射
            CalendarEventForm form = Mapper.Map<CalendarEvent, CalendarEventForm>(calendarEvent);

            //form.EventDate.ShouldEqual(new DateTime(2008, 12, 15));
            //form.EventHour.ShouldEqual(20);
            //form.EventMinute.ShouldEqual(30);
            //form.Title.ShouldEqual("假期公司聚会");

            Console.WriteLine(JsonConvert.SerializeObject(form));
        }

    }




    public class CalendarEvent
    {
        public DateTime Date { 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; }
    }





    public class Order
    {
        public string Name { get; set; }
        public Customer Customer { get; set; }
        public decimal GetTotal()
        {
            return 10 * 10;
        }
    }
    public class Customer
    {
        public string Name { get; set; }
    }

    public class OrderDto
    {
        public string Name { get; set; }
        public string CustomerName { get; set; }
        public decimal Total { get; set; }
    }
}
原文地址:https://www.cnblogs.com/guxingy/p/11195107.html