我有这些业务类:
class BaseNode
{
public string name;
}
class CompositeNode : BaseNode
{
public List<BaseNode> childs = new List<BaseNode>();
}
还有这个扁平的 dto:
class NodeDto
{
public string name;
public List<NodeDto> childs;
}
(注意所有派生类型如何由一个 dto 类表示)
我使用 auto mapper进行转换:
Mapper.CreateMap<BaseNode, NodeDto>()
.Include<CompositeNode, NodeDto>()
.ForMember(s => s.childs, prop => prop.Ignore());
Mapper.CreateMap<CompositeNode, NodeDto>();
Mapper.AssertConfigurationIsValid();
var root = new CompositeNode() { name = "root" };
var child = new CompositeNode {name = "child"};
var child2 = new CompositeNode { name = "child2" };
root.childs.Add(child);
child.childs.Add(child2);
var rootDto = Mapper.Map<CompositeNode, NodeDto>(root);
但是下面的总是空的,而不是有子列表:
rootDto.childs[0].childs
(即只有一级 child 被正确映射)
如果我删除 prop.Ignore 部分,我会收到一个断言错误,指出未映射 childs 属性。
我做错了什么?
最佳答案
这是旧的,但在寻找其他东西时遇到了它......你告诉它忽略 child 的领域。 AutoMapper 正在执行它被告知要做的事情。
.ForMember(s => s.childs, prop => prop.Ignore());
关于c# - AutoMapper 的多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3630399/