我有两个名为 ApprenticeshipDto
和 Apprenticeship
的类,如下所示
public class ApprenticeshipDto
{
public int Id { get; set; }
public string PersonFirstName { get; set; }
public string PersonLastName { get; set; }
}
public class Apprenticeship
{
public virtual int Id { get; set; }
public Person Person { get; set; }
}
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
这就是我尝试将 ApprenticeshipDto 映射到 Apprenticeship 的方式:
Mapper.CreateMap<ApprenticeshipDto, Apprenticeship>();
Apprenticeship a = Mapper.Map<Apprenticeship>(Apprdto);
问题是所有属性都已正确映射,但 Person
未正确映射。
是否可以告诉 Automapper 创建 Person 属性并自动将 PersonFirstName
和 PersonLastName
分配给 FirstName
和 LastName
人对象?
最佳答案
是的,可以通过使用 custom value resolver 告诉 AutoMapper 将 DTO 属性映射到目标对象属性。类(class)。解析器将 PersonFirstName
和 PersonLastName
属性映射到新的 Person
对象:
// create the resolver class
// -> extract person info from DTO and return a new Person object
public class CustomResolver : ValueResolver<ApprenticeshipDto, Person>
{
protected override Person ResolveCore(ApprenticeshipDto source)
{
return new Person
{
FirstName = source.PersonFirstName,
LastName = source.PersonLastName
};
}
}
然后在映射之前在 AutoMapper 配置中使用新的自定义解析器类:
Mapper.CreateMap<ApprenticeshipDto, Apprenticeship>();
var adto = new ApprenticeshipDto
{
Id = 10,
PersonFirstName = "John",
PersonLastName = "Doe"
};
// configure custom mapping
Mapper.CreateMap<ApprenticeshipDto, Apprenticeship>()
.ForMember(destination => destination.Person, opt => opt.ResolveUsing<CustomResolver>());
Apprenticeship a = Mapper.Map<Apprenticeship>(adto);
Console.WriteLine("{0} - {1} - {2}", a.Id, a.Person.FirstName, a.Person.LastName);
输出符合预期:
10 - John - Doe
关于c# - 使用 Automapper 基于内置数据类型创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29588336/