AutoMapper 指定映射字段 ForMember 和 MapFrom
概念
当源类和目标类属性名称不一致,无法自动映射时,使用 ForMember() 和MapFrom() 手动指定映射关系。
ForMember(目标属性, opt => opt.MapFrom(src => 源属性))- 写在继承
Profile的配置类里面。
完整可运行代码
using AutoMapper;
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//初始化配置,加载映射配置Profile
Mapper.Initialize(x =>
{
x.AddProfile<MappingProfile>();
});
//源对象
Person person = new Person() { EnglishName = "Joy" };
//方式1:已有目标对象,传入对象引用
People people = new People();
Mapper.Map(person, people);
Console.WriteLine(people.YingWenMing); //输出 Joy
//方式2:直接返回新对象(泛型返回)
var perple = Mapper.Map<People>(person);
Console.WriteLine(perple.YingWenMing); //输出 Joy
Console.ReadKey();
}
}
//源类
class Person
{
public string EnglishName { get; set; }
}
//目标类
class People
{
public string YingWenMing { get; set; }
}
//映射配置类,继承 Profile
public class MappingProfile : Profile
{
public MappingProfile()
{
CreateMap<Person, People>()
// 目标.YingWenMing 映射来自源.EnglishName
.ForMember(a => a.YingWenMing, b => b.MapFrom(src => src.EnglishName));
}
}
}Code language: JavaScript (javascript)
核心语法
CreateMap<Person, People>()
.ForMember(
dest => dest.YingWenMing, // dest:目标对象的属性
opt => opt.MapFrom(src => src.EnglishName) // src:源对象的属性
);Code language: JavaScript (javascript)
dest:destination 目标对象(People)src:source 源对象(Person)MapFrom:指定值取自源对象的哪个字段。
两种Map重载写法
- 传入已有实例,修改原有对象
People people = new People();
Mapper.Map(person, people); Code language: JavaScript (javascript)
- 直接创建并返回新目标对象(常用)
var people = Mapper.Map<People>(person);Code language: HTML, XML (xml)
Previous: 扁平化映射(Flattening)
Next: 配置验证