C# 自动映射多态性
我有以下商务课程:C# 自动映射多态性,c#,polymorphism,automapper,dto,C#,Polymorphism,Automapper,Dto,我有以下商务课程: class BaseNode { public string name; } class CompositeNode : BaseNode { public List<BaseNode> childs = new List<BaseNode>(); } (即,只有一级子级映射正确) 如果我删除prop.Ignore部分,我会得到一个断言错误,即childs
class BaseNode
{
public string name;
}
class CompositeNode : BaseNode
{
public List<BaseNode> childs = new List<BaseNode>();
}
(即,只有一级子级映射正确)
如果我删除prop.Ignore部分,我会得到一个断言错误,即childs属性没有映射
我做错了什么?您的类中没有属性
公共字符串名称{get;set;}
,您有公共字段,我认为这就是问题所在
此外,为了映射这些类,您只需要创建2个简单的映射
Mapper.CreateMap<CompositeNode, NodeDto>();
Mapper.CreateMap<BaseNode, NodeDto>()
.ForMember(s => s.childs, prop => prop.Ignore());;
Mapper.CreateMap();
Mapper.CreateMap()
.ForMember(s=>s.childs,prop=>prop.Ignore());;
这是旧的,但在寻找其他东西时遇到了它。。。你让它忽略孩子的领域。AutoMapper正在做它被要求做的事情
.ForMember(s => s.childs, prop => prop.Ignore());
我做错了什么?您使用的是Automapper:D。名称字段不是问题所在-它可以以任何方式工作。使用上面的映射并不能解决这个问题。@Yaron Naveh我的意思是使用字段而不是属性,区别在于属性有getter和setter,而字段没有
rootDto.childs[0].childs
Mapper.CreateMap<CompositeNode, NodeDto>();
Mapper.CreateMap<BaseNode, NodeDto>()
.ForMember(s => s.childs, prop => prop.Ignore());;
.ForMember(s => s.childs, prop => prop.Ignore());