使用AutoMapper映射对象

时间:2017-10-10 20:28:25

标签: c# automapper

我的课程看起来像这样:

public class Student{
    public string Name { get; set; }
    public string Id { get; set; }
    public List<Course> Courses { get; set; }
    public string Address { get; set; }
}

public class Course{
    public string Id { get; set; }
    public string Description { get; set; }
    public Date Hour { get; set; }
}

我想使用 AutoMapper

将Student类映射到以下类
public class StudentModel{
    public string Id { get; set; }
    public StudentProperties Properties { get; set; }
}

其中StudentProperties是学生班的其余属性

public class StudentProperties{
    public string Name { get; set; }
    public List<Course> Courses { get; set; }
    public string Address { get; set; }
}

基于AutoMapper文档(https://github.com/AutoMapper/AutoMapper/wiki),我们可以使用自定义解析器在执行映射时解析目标成员。 但我不想为解析器添加新课程。

我想知道是否有一种简单的方法来执行映射,只需执行这样的简单配置:

Mapper.Initialize(cfg =>
{
    cfg.CreateMap<Student, StudentProperties>();
    cfg.CreateMap<Student, StudentModel>();
});

3 个答案:

答案 0 :(得分:2)

以下是一个适用于您的选项,并会对.wrapper { position: relative; } AutoMapper使用StudentModel

StudentProperties

在这里,我们使用Mapper.Initialize(cfg => { cfg.CreateMap<Student, StudentProperties>(); cfg.CreateMap<Student, StudentModel>() .ForMember(dest => dest.Properties, opt => opt.ResolveUsing(Mapper.Map<StudentProperties>)); }); ,但使用ResolveUsing版本以避免创建新类。此Func<>本身只是Func<>,已经知道如何从Mapper.Map映射到Student

答案 1 :(得分:1)

我认为你可以尝试做那样的事情

CreateMap<Student, StudentModel>()
            .ForMember(dist => dist.Properties,
                opt => opt.MapFrom(src => Mapper.Map<StudentProperties>(src)))

答案 2 :(得分:0)

cfg.CreateMap<Student, StudentModel>()
    .ForMember(
        x => x.Properties,
        x => x.ResolveUsing((src) => {
            return new StudentProperties(){
                Name    = src.Name,
                Courses = src.Courses,
                Address = src.Address
            }));

Working Fiddle here.