我有以下情况:
源
public class AccountLogin
{
public int UserID { get; set; }
public bool AccountVerified { get; set; }
}此对象从数据库中返回,因此如果没有找到用户,则可能为空。
目标
public class LoginUserResponseModel
{
public bool AccountExists { get; set; }
public bool AccountVerified { get; set; }
public string Status { get; set; }
public string Token { get; set; }
}我需要什么?
如果源为null,则需要具有以下参数的目标对象的实例:
{
"AccountExists": false,
"AccountVerified": false
"Status": "Error"
"Token": null
}我将AutoMapper代码放入MappingProfile.cs文件中如下所示:
CreateMap<AccountLogin, LoginUserResponseModel>()
.ForMember(dest => dest.AccountExists, opt => opt.MapFrom(src => src == null ? false : true))
.ForMember(dest => dest.Status, opt => opt.MapFrom(src => src == null ? "Error" : "Ok"));当对象为非空时,它设置Status = "Ok"和AccountExists = false时,此代码工作良好。
当我从数据库接收到现有用户时,我的源AccountLogin,例如:

所以这张地图是这样正确的:

问题是当源为空时,目标也为空:

我有很多解决办法,但我真的很好奇是否可以用AutoMapper来实现它。
我使用的项目是ASP Net Core 2.2和AutoMapper v6.1.1
发布于 2019-07-29 09:31:42
您可以使用自定义的ConvertUsing尝试ITypeConverter:
public class MyConverter : ITypeConverter<AccountLogin, LoginUserResponseModel >
{
public int Convert(AccountLogin source, LoginUserResponseModel destination, ResolutionContext context)
{
return new LoginUserResponseModel{
AccountExists = source == null ? false : true,
AccountVerified = false,
Status = source == null ? "Error" : "Ok",
"Token": null
};
}
}然后将其映射为:
CreateMap<AccountLogin, LoginUserResponseModel>().ConvertUsing(new MyConverter());https://stackoverflow.com/questions/57249979
复制相似问题