我有一個(gè)看起來(lái)有點(diǎn)像這樣的 Dto:class TypeDto{ int Id {get; set;} string Name {get; set;} string DisplayName {get; set;} IEnumerable<TypeDto> Children {get; set;}}現(xiàn)在我需要從兩個(gè)不同的來(lái)源映射到它。那是因?yàn)槠渲幸粋€(gè)包含Name,另一個(gè)包含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 中的名稱差異?,F(xiàn)在對(duì)于地圖,我會(huì)這樣做: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);第一個(gè)映射按預(yù)期工作,遞歸映射子項(xiàng),填充Id和Name字段并DisplayName在null任何地方保持相等。然而,第二個(gè)映射DisplayName正確地填充了根對(duì)象,但隨后在其子對(duì)象中,它使該Name字段無(wú)效。例如: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" }}};映射以下實(shí)例后,結(jié)果的字段設(shè)置為:Id = 1,Name = "root",DisplayName = "Root",Children = { TypeDto { Id = 2, Name = null, DisplayName = "Child", Children = null } }所以孩子的Name無(wú)效,這不是我想要的。我希望它是"child",顯然。我應(yīng)該如何配置映射器以獲得想要的行為?我無(wú)法更改Type1或Type2類,它們來(lái)自外部 API。AutoMapper 的版本是 6.2.1,.NET Framework 4.5.1。
- 2 回答
- 0 關(guān)注
- 172 瀏覽
添加回答
舉報(bào)
0/150
提交
取消