.net - c# automapper 嵌套对象到平面对象列表
问题描述
我有以下示例结构:
public class Client
{
public Guid Id { get; set; }
public string Name { get; set; }
public ICollection<Adress> AdressList { get; set; }
}
public class Adress
{
public Guid Id { get; set; }
public string street { get; set; }
}
我想将此结构自动映射到normalizr为 javascript 所做的事情。我想要一个看起来像这个对象的结果
public class ViewModelRoot
{
public ICollection<ViewModelClient> ViewModelClientList { get; set; }
public ICollection<ViewModelAdress> ViewModelAdressList { get; set; }
}
public class ViewModelClient
{
public Guid Id { get; set; }
public string Name { get; set; }
public ICollection<string> AdressIdList { get; set; }
}
public class ViewModelAdress
{
public Guid Id { get; set; }
public string street { get; set; }
}
映射应将 AdressList 从我的 Client 类中提取到同一级别的单独列表中,并且应仅将 References 替换为其 Guid。
我认为 AutoMapper 可以做到这一点……有什么想法吗?提前非常感谢。
解决方案
Mapper.Initialize(cfg=>
{
cfg.CreateMissingTypeMaps = false;
cfg.CreateMap<Client, ViewModelRoot>()
.ForMember(d=>d.ViewModelClientList, o=>o.MapFrom(s=>new[]{s}))
.ForMember(d=>d.ViewModelAdressList, o=>o.MapFrom(s=>s.AdressList));
cfg.CreateMap<Client, ViewModelClient>()
.ForMember(d=>d.AdressIdList, o=>o.MapFrom(s=>s.AdressList.Select(a=>a.Id)));
cfg.CreateMap<Adress, ViewModelAdress>();
});
推荐阅读
- javascript - 当用户做出反应时,Discord Bot 不发送消息
- c++ - 如何将输入正确读入二维向量,向量
> 在 C++ 中 - node.js - 如何将 DynamoDB 导入 Lambda 函数?
- php - 只回复 pdf / img phpmailer
- android - 复制所有文件、子目录、属性等,在合法取证设置中保留所有文件信息
- api - 如何使用 BidiMode 从右到左从 TToolWindow 强制 TToolBar Dessendent
- javascript - 如何使用 react-redux 在表单提交上实现加载微调器?
- ansible - ansible 通过循环检查强制参数
- python - 如何调试我的 Python 实现 replace_ending()?
- mysql - Dockerfile Mysql - 处理时遇到错误