我有一个看起来有点像这样的 Dto:class TypeDto{ int Id {get; set;} string Name {get; set;} string DisplayName {get; set;} IEnumerable<TypeDto> Children {get; set;}}现在我需要从两个不同的来源映射到它。那是因为其中一个包含Name,另一个包含DisplayName. 所以类型:class Type1{ int Id {get; set;} string Name {get; set;} IEnumerable<Type1> Children {get; set;}}class Type2{ int Id {get; set;} string DisplayName {get; set;} IEnumerable<Type2> Nested {get; set;}}注意Children/ Nestedenumerable 中的名称差异。现在对于地图,我会这样做:config.CreateMap<Type1, TypeDto>();config.CreateMap<Type2, TypeDto>() .ForMember(dest => dest.Children, opts => opts.MapFrom(src => src.Nested));var dto = _mapper.Map<TypeDto>(type1Instance);_mapper.Map(type2Instance, dto);第一个映射按预期工作,递归映射子项,填充Id和Name字段并DisplayName在null任何地方保持相等。然而,第二个映射DisplayName正确地填充了根对象,但随后在其子对象中,它使该Name字段无效。例如:var type1Instance = new Type1 { Id = 1, Name = "root", Children = new[] { new Type1 { Id = 2, Name = "child" }}};var type2Instance = new Type2 { Id = 1, DisplayName = "Root", Children = new[] { new Type2 { Id = 2, DisplayName = "Child" }}};映射以下实例后,结果的字段设置为:Id = 1,Name = "root",DisplayName = "Root",Children = { TypeDto { Id = 2, Name = null, DisplayName = "Child", Children = null } }所以孩子的Name无效,这不是我想要的。我希望它是"child",显然。我应该如何配置映射器以获得想要的行为?我无法更改Type1或Type2类,它们来自外部 API。AutoMapper 的版本是 6.2.1,.NET Framework 4.5.1。
2 回答
- 2 回答
- 0 关注
- 140 浏览
添加回答
举报
0/150
提交
取消