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; }
}
}
手机扫一扫
移动阅读更方便
你可能感兴趣的文章