c# - AutoMapper 的多态性

标签 c# polymorphism automapper dto

我有这些业务类:

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/

相关文章:

c# - 如何使用 BindingSources 将 DataObject 的列表绑定(bind)到网格?

c# - 在 PropertyGrid 上设置 SelectedTab

ios - 面向对象编程的正确概念

c# - 这两种使用foreach的方式有区别吗?

c# - 无法将文件路径作为命令行参数传递,其中路径包含空格?

c++ - 减少非虚拟多态类中基派生委托(delegate)的样板

haskell - 多态模式匹配导致类型不明确

c# - 为什么我必须在 AutoMapper 中创建 map

c# - 具有相同类型的嵌套 Dto 的 Dto 失败

c# - Automapper ResolveUsing 原因 "Can' t 将此解析为可查询表达式”