Witam,
mam problem z mapowaniem obiektów. Dokładniej chodzi o stringa. Zamiast zmapować wartość stringa to w wartości dostaję nazwę klasy. Możliwe, że gdzieś zrobiłem mały błąd lub ewentualnie moje całe podejście jest błędne, proszę o pomoc.
Mój wynikowy JSON wygląda tak:
{
"number": "6",
"addedDate": "10/19/2018 14:52",
"status": "Serwis zewnętrzny",
"deviceStatus": "W serwisie",
"excpectedComplentionDate": "10/19/2018",
"repairActions": [
{
"id": 19,
"repairActionDefinition": "ServiceManager.DataAccess.Model.RepairActionDefinitions",
"publicComment": "Wymiana kondensatorów i ekranu LCD",
"actionDate": "26.10.2018 20:39:26"
},
{
"id": 29,
"repairActionDefinition": "ServiceManager.DataAccess.Model.RepairActionDefinitions",
"publicComment": "Reinstalacja systemu",
"actionDate": "02.12.2018 12:06:34"
}
]
}
Jak widać repairActionDefinition podstawia mi coś takiego.
Jeżeli chodzi o serwis, który mi wyciąga dane z bazy to:
using (var db = new SmContext())
{
var repair = await db.Repairs.Include(r => r.RepairStatus)
.Include(r => r.Device.DeviceStatus)
.Include(r => r.RepairActions)
.ThenInclude(r => r.RepairActionDefinition)
.SingleOrDefaultAsync(r => r.RepairNumber == repairId && r.Client.Email == email);
var repairView = Mapper.Map<Repairs, RepairView>(repair);
return repairView;
W obiekcie repair mam poprawne dane w tym polu, mam tam cały obiekt RepairActionDefinition.
Dopiero po zmapowaniu dostaję coś jak powyżej. Mam dwa profile do AutoMapera:
public RepairProfile()
{
CreateMap<Repairs, RepairView>()
.ForMember(d => d.Number, o => o.MapFrom(s => s.RepairNumber))
.ForMember(d => d.AddedDate, o => o.MapFrom(s => s.CreatedDate.ToString("g",
DateTimeFormatInfo.InvariantInfo)))
.ForMember(d => d.ExcpectedComplentionDate, o => o.MapFrom(s => s.ExpectedComplentionDate.ToString("d", DateTimeFormatInfo.InvariantInfo)))
.ForMember(d => d.DeviceStatus, o => o.MapFrom(s => s.Device.DeviceStatus.Name))
.ForMember(d => d.Status, o => o.MapFrom(s => s.RepairStatus.Name))
.ForMember(d => d.RepairActions, o => o.MapFrom(s => s.RepairActions));
}
public RepairActionProfile()
{
CreateMap<RepairActions, RepairActionView>()
.ForMember(d => d.RepairActionDefinition, o => o.MapFrom(s => s.RepairActionDefinition.Name))
.ForMember(d => d.ActionDate, o => o.MapFrom(s => s.ActionDate.ToString("g",
DateTimeFormatInfo.InvariantInfo)));
}
W razie potrzeby mogę dołączyć kody klas DTO oraz klas modelu bazy.