因此,我正在与一些朋友一起构建Web应用程序,在其中我将为其创建后端代码。我有几种模型,但是httppost中只有一种模型。
所以我收到的传入http帖子有什么:
public class LanpartyDto
{
public Guid Id { get; set; }
[Required]
public string Name { get; set; }
[Required]
public DateTime Date { get; set; }
[Required]
public string Description { get; set; }
public Dictionary<DateTime, IList<string>> UsersAvailableForDate { get; set; }
}
public class Lanparty
{
public Guid Id { get; set; }
[Required]
public string Name { get; set; }
[Required]
public DateTime Date { get; set; }
[Required]
public string Description { get; set; }
[Required]
public Guid AvailablityId{ get; set; }
public IList<Availability> AvailableUsers { get; set; }
}
public class Availability
{
public Guid Id { get; set; }
public string DateAvailable { get; set; }
public IList<string> Name { get; set; }
}
public AutoMapping()
{
CreateMap<Lanparty, LanpartyDto>()
.ForMember(dest => dest.UsersAvailableForDate, m => m.MapFrom(src => src.AvailableUsers.ToDictionary(k=>k.DateAvailable, v=>v.Name.ToList())));
}
那么我可以将一个dto映射到多个嵌套类吗?到目前为止,我猜不是因为我得到了地图异常,然后在这里和google上浏览,是否有可能我也可以进行可用性查询,但是我看不到有什么用? 那么,最好的选择是什么,尝试更改前端代码,以便更改dto?还是自己创建映射代码,因为对于一类来说这并不困难?
答案 0 :(得分:2)
您想要的映射如下所示:
CreateMap<Lanparty, LanpartyDto>()
.ForMember(dest => dest.UsersAvailableForDate,
m => m.MapFrom(src => src.AvailableUsers.ToDictionary(k => k.DateAvailable, v => v.Name)));
CreateMap<LanpartyDto, Lanparty>()
.ForMember(dest => dest.AvailableUsers,
m => m.MapFrom(src => src.UsersAvailableForDate.Select(u => new Availability { DateAvailable = u.Key, Name = u.Value })));
我允许自己将Availability.DateAvailable属性类型更改为DateTime,因为我不太了解为什么在此处使用字符串。但是,如果您希望它是一个字符串,只需将ToString()
添加到u.Key
部分。