指定映射字段

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)
  1. dest:destination 目标对象(People)
  2. src:source 源对象(Person)
  3. MapFrom:指定值取自源对象的哪个字段。

两种Map重载写法

  1. 传入已有实例,修改原有对象
People people = new People();
Mapper.Map(person, people); Code language: JavaScript (javascript)
  1. 直接创建并返回新目标对象(常用)
var people = Mapper.Map<People>(person);Code language: HTML, XML (xml)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注