这是原始类型
public class Category
{
public Guid Id { get; set; }
public string CategoryName { get; set; }
public Guid? ParentCategoryId { get; set; }
public int? Level { get; set; }
public Category ParentCategory { get; set; }
public IList<Category> ChildrenCategory { get; } = new List<Category>();
public IList<Product> Products { get; } = new List<Product>();
}
我试图映射到此类型
public class CategoryDto
{
public Guid Id { get; set; }
public string CategoryName { get; set; }
public Guid? ParentCategoryId { get; set; }
public List<CategoryDto> ChildreenCategory { get; }
= new List<CategoryDto>();
}
类别有一个名为 ChildrenCategory 的属性,类型为列表。
我试过这个,
AutoMapper.Mapper.Initialize(cfg =>
{
cfg.CreateMap<Category, CategoryDto>()
.ForMember(d => d.ChildreenCategory,
o => o.MapFrom(s => s.ChildrenCategory));
;
});
当我运行Postman
时,我得到一个空数组{
"id": "c1a16772-31d1-4025-a1b9-7206066ffd94",
"categoryName": "Women",
"parentCategoryId": null,
"childreenCategory": []
},
感谢您的帮助
答案 0 :(得分:1)
您的目的地DTO属性ChildreenCategory
没有设置器,因此它将始终设置为空列表。添加setter可以映射您的子对象:
public List<CategoryDto> ChildreenCategory { get; set; }
如果您在DTO上拼写ChildreenCategory
以匹配源类,那么您可以删除映射定义上的整个ForMember
调用,因为它将自动连接。
AutoMapper.Mapper.Initialize(cfg =>
{
cfg.CreateMap<Category, CategoryDto>();
});