recursion - Automapper Parent Child Mapping 将 Grandchildren Properties 设置为 null
问题描述
Automapper 在对象之间映射时似乎忽略了孙对象。所以我只能得到 2 级递归。我至少需要 3 个,最好是 n 个级别。
如何让 Automapper 返回正确的对象,所有子对象都完好无损?
我可以通过序列化我的 DbPOCO 并反序列化到 Dto 来解决它,但这意味着在我的应用程序中交叉关注点,和/或为我不喜欢的这个特定方法做一些不同的事情。
鉴于我的 DB Poco
public class Menu : SqlTable, IParentChild<Menu>
{
public string Label {get; set;}
public string Route {get; set;}
public float Sequence { get; set; }
public int? ParentID {get; set;}
public Menu Parent {get; set;}
public IList<Menu> Children { get; set; }
}
我可以(使用一些递归魔法)返回一个像这样序列化的对象,但它包括(删除的)数据库审计列和其他我不想通过我的 API 进行通信的表通用项。
[
{
"Label": "Main Menu 1",
"Route": "",
"Sequence": 1,
"ParentID": null,
"Parent": null,
"Children": [
{
"Label": "Menu 1 Sub 1",
"Route": "",
"Sequence": 1,
"ParentID": 1,
"Parent": null,
"Children": [
{
"Label": "Menu 1 Sub 1 Sub 1",
"Route": "",
"Sequence": 1,
"ParentID": 2,
"Parent": null,
"Children": [],
...
},
{
"Label": "Menu 1 Sub 1 Sub 2",
"Route": "",
"Sequence": 2,
"ParentID": 2,
"Parent": null,
"Children": [],
...
}
],
...
},
{
"Label": "Menu 1 Sub 2",
"Route": "",
"Sequence": 2,
"ParentID": 1,
"Parent": null,
"Children": [],
"ID": 5,
...
}
],
...
},
{
"Label": "Main Menu 2",
"Route": "",
"Sequence": 2,
"ParentID": null,
"Parent": null,
"Children": [
{
"Label": "Menu 2 Sub 1",
"Route": "",
"Sequence": 1,
"ParentID": 6,
"Parent": null,
"Children": [],
...
}
],
...
}
]
当我将其传递给 Automapper 时,将其映射到以下 DTO
public class WebApplicationMenuModel
{
public string Label { get; set; }
public string Route { get; set; }
public float Sequence { get; set; }
public IEnumerable<WebApplicationMenuModel> Children { get; set; }
}
我原始对象的孙子设置为空
[
{
"Label": "Main Menu 1",
"Route": "",
"Sequence": 1,
"Children": [
{
"Label": "Menu 1 Sub 1",
"Route": "",
"Sequence": 1,
"Children": null
},
{
"Label": "Menu 1 Sub 2",
"Route": "",
"Sequence": 2,
"Children": null
}
]
},
{
"Label": "Main Menu 2",
"Route": "",
"Sequence": 2,
"Children": [
{
"Label": "Menu 2 Sub 1",
"Route": "",
"Sequence": 1,
"Children": null
}
]
}
]
地图配置文件相当基本
public class MenuProfile : Profile
{
public MenuProfile()
{
CreateMap<Menu, WebApplicationMenuModel>()
.ReverseMap();
}
}
解决方案
参见 Lucian Bargaoanu 的回复。需要使用主 Automapper 分支 (9.1.0-ci-01627) 从 MyGet 支持此功能。
推荐阅读
- javascript - Repeat infinity an animation after loading the page in JavaScript
- sublimetext3 - 如何使用 SublimeLinter 解决此问题?
- c++ - 如何“组合”两个静态库?
- excel - Excel:专业税仅适用于重复姓名的最大值(关税)
- json - 无法为具有多个详细记录的 JSON 呈现 JasperReport
- tabulator - 制表符 - 独家标题过滤器 - 如何?
- docker - docker build 中的错误 - Err:1 http://deb.debian.org/debian stretch/main amd64 unzip amd64 6.0-21+deb9u1 404 Not Found
- python - 对 Pandas 数据框中列的每条记录应用相同的函数
- bixby - 在为多个设备开发时,我如何改变不同设备的 UI,例如手机和手表
- c# - WPF 从覆盖方法更新 UI 不起作用