我正在尝试使用 mapster 将服务模型映射到视图模型。
我的服务模型包含字符串列表。
我的视图模型包含类型rolesviewModel的列表。
rolesviewModel具有名为rolename的字符串属性。
以下是我的模型
public class UserViewModel
{
[Display(Name = "Email address")]
[Required(ErrorMessage = "The email address is required")]
[EmailAddress(ErrorMessage = "Invalid Email Address")]
public string Email { get; set; }
public List<RolesViewModel> Roles { get; set; } = new List<RolesViewModel>();
}
public class RolesViewModel
{
public RolesViewModel(string roleName)
{
RoleName = roleName;
}
public string RoleName { get; set; }
}
//Service Model
public class User
{
public string Email { get; set; }
public List<string> Roles { get; set; } = new List<string>();
}
//Service Return Model
public class ServiceResponse<T>
{
public bool Success { get; set; } = false;
public Data.Enums.Exception Exception { get; set; }
public T ResponseModel { get; set; }
/// <summary>
/// Allows Service Response <T> to be cast to a boolean.
/// </summary>
/// <param name="response"></param>
public static implicit operator bool(ServiceResponse<T> response)
{
return response.Success;
}
}
我的控制器中使用映射的线路如下:
List<UserViewModel> viewModel = serviceResponse.ResponseModel.Adapt<List<UserViewModel>>();
最后我的映射config
public class Mapping : IRegister
{
public void Register(TypeAdapterConfig config)
{
config.NewConfig<Tracer, TracerViewModel>();
config.NewConfig<Asset, AssetViewModel>();
config.NewConfig<Project, ProjectViewModel>();
config.NewConfig<User, UserViewModel>();
config.NewConfig<RolesViewModel, string>();
}
}
要尝试将映射用于工作,我尝试将映射配置更新为:
public class Mapping : IRegister
{
public void Register(TypeAdapterConfig config)
{
config.NewConfig<Tracer, TracerViewModel>();
config.NewConfig<Asset, AssetViewModel>();
config.NewConfig<Project, ProjectViewModel>();
config.NewConfig<User, UserViewModel>().Map(dest => dest.Roles.Select(t => t.RoleName.ToString()).ToList(), src => src.Roles);
config.NewConfig<UserViewModel, User>().Map(src => src.Roles, dest => dest.Roles.Select(t => t.RoleName.ToString()).ToList());
config.NewConfig<RolesViewModel, string>();
}
}
但是我收到错误消息:"从'System.String'到'ViewModels.RolesViewModel'。
任何人都可以告诉我我在映射课上需要什么配置。
似乎您正在尝试在寄存器函数的最后一行中强制字符串和对象之间的直接图。将对象映射到其他对象。您无法将对象映射到CLR参考类型。为了实现您尝试做的最佳方法是创建一个接收字符串并正确处理的函数。
正如Mapster所说,当映射到字符串时,它将使用tostring或解析来执行映射:
var s = 123.Adapt<string>(); //equal to 123.ToString();
var i = "123".Adapt<int>(); //equal to int.Parse("123");
因此,您将需要实现一个转换例程,该程序告诉MAPSTER如何从字符串到RolesviewModel。