gpt4 book ai didi

.net - 为什么 AutoMapper 只在列表中的第一个元素上使用我的配置?

转载 作者:行者123 更新时间:2023-12-04 06:31:45 26 4
gpt4 key购买 nike

这是我的 AutoMapper 配置:

Mapper.CreateMap<Source, Destination>()
.ConstructUsing(s => new Destination(s.CreatedDate.DateTime));

这两个类都有一个属性, CreatedDate ,但它们是不同的类型:
public class Source
{
public DateTimeOffset CreatedDate { get; set; }
}

public class Destination
{
public Destination(DateTime created) { CreatedDate = created; }
public DateTime CreatedDate { get; set; }
}

当我在一个实例与另一个实例之间进行映射时,此配置工作正常,但是当我在这些类型的可枚举项之间进行映射时会出现问题,如下所示:
var dests = Mapper.Map<IEnumerable<Source>, Destination[]>(sources);

在这种情况下,AutoMapper 调用 Destination要映射的第一个元素的构造函数,但显然会继续自动映射其余元素。自动映射抛出异常,因为同名 CreatedDate属性有不同的类型。

如果我更改其中一个属性的名称 - 例如, Destination.Created - 如您所料,在所有元素上调用构造函数。

我正在使用最新版本的 AutoMapper (v1.1.0.188)。这似乎一定是一个错误,但也许我忽略了一些东西?

最佳答案

您可能想尝试不同的方法。我会尝试:

Mapper.CreateMap<Source, Destination>()
.ForMember(d => d.CreatedDate,
opt => opt.MapFrom(s => s.CreatedDate.DateTime));

映射稍微冗长一些,但应该为每个元素正确处理。不仅如此,您现在还可以删除 Destination 上多余的构造函数。类(class)。

关于.net - 为什么 AutoMapper 只在列表中的第一个元素上使用我的配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5329768/

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