开源项目 07 AutoMapper
阅读原文时间:2023年07月13日阅读:2

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(, , , , , ),  
            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  \* ;  
    }  
}  
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; }  
}  

}