gpt4 book ai didi

automapper - AutoMapper 可以隐式地展平这个映射吗?

转载 作者:行者123 更新时间:2023-12-05 01:18:11 29 4
gpt4 key购买 nike

我正在尝试在两个对象列表之间进行映射。源类型具有类型为 A 的复杂属性。 ;目标类型是类型 A 的扁平子集加上源类型中的附加标量属性。

public class A
{
public int Id { get; set; }
public string Name { get; set; }
}

public class Source
{
public A MyA { get; set; }
public int SomeOtherValue { get; set; }
}

public class Destination
{
public string Name { get; set; }
public int SomeOtherValue { get; set; }
}

如果不清楚,我想 Source.MyA.Name映射到 Destination.NameSource.SomeOtherValue映射到 Destination.SomeOtherValue .

实际上,输入 A有十几个属性,大约 80% 映射到 Destination 中的同名属性。 .如果我明确说明 CreateMap 中的映射,我就可以让事情工作起来。像这样:
CreateMap<Source, Destination>()
.ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.MyA.Name));

这里的缺点是我想避免添加 ForMember每条线路 A需要复制到 Destination 的属性.我希望我能做这样的事情:
CreateMap<Source, Destination>()
.ForMember(dest => dest, opt => opt.MapFrom(src => src.MyA));

但是,如果我尝试上述操作,则在注册映射时会出现运行时错误:“成员的自定义配置仅支持类型上的顶级个人成员。”

谢谢

最佳答案

A 之间创建映射和 Destination , 和 SourceDestination ,然后使用 AfterMap()在第二个中使用第一个映射

Mapper.CreateMap<A, Destination>();
Mapper.CreateMap<Source, Destination>()
.AfterMap((s, d) => Mapper.Map<A, Destination>(s.MyA, d));

然后像这样使用它:
var res = Mapper.Map<Source, Destination>(new Source { SomeOtherValue = 7,  MyA = new A { Id = 1, Name = "SomeName" } });

关于automapper - AutoMapper 可以隐式地展平这个映射吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13128523/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com