Ich programmierte eine Web-API und wollte das User Model dem UserView-Modell zuordnen. Das Debuggen bestätigt, dass mapper.Map (Benutzer) ein Nullwertobjekt zurückgibt. Mapper ist eine Instanz der IMapper-Klasse von AutoMapper.
public class User
{
public Guid Id { get; set; }
public string Name { get; set; }
public string Password { get; set; }
public string Email { get; set; }
public UserRole? Role { get; set; }
}
public class UserView
{
public Guid Id { get; }
public string Name { get; }
public string Email { get; }
public UserRole? Role { get; }
}
public class MappingProfiles : Profile
{
public MappingProfiles()
{
CreateMap<User, UserView>();
}
}
//In startup.cs
services.AddAutoMapper();
//In user service class.
var userView = _mapper.Map<UserView>(user);
Die Ausgabe sieht so aus.
{
"id": "00000000-0000-0000-0000-000000000000",
"name": null,
"email": null,
"role": null
}
Das UserView
Modell verfügt nur über Getter. Wenn Sie sie lesbar behalten möchten, können Sie Folgendes tun
Fügen Sie einen Konstruktor zu UserView hinzu
public class UserView
{
public Guid Id { get; }
public string Name{ get; }
public string Email { get; }
public UserRole? Role { get; }
public UserView(Guid id, string name, string email, UserRole role)
{
Id = id;
Name = name;
Email = email;
Role = role;
}
}
Passen Sie auch das Mapping-Profil an
public class MappingProfiles : Profile
{
public MappingProfiles()
{
CreateMap<User, UserView>()
.ConstructUsing(src => new UserView(src.Id, src.Name, src.Email, src.UserRole));
}
}
Der einfachste Weg wäre das Hinzufügen von Setters zu allen Eigenschaften von UserView
.