AutoMapper从子节点获取属性

本文关键字:属性 获取 子节点 AutoMapper | 更新日期: 2023-09-27 18:18:45

我的模型如下:

public class Source
{
    public string Property1 { get; set; }
    public string Property2 { get; set; }
}
public class SourceContainer
{
    public Source Source { get; set; }
    public string ExtraData { get; set; }
}
public class SourceViewModel
{
    public string Property1 { get; set; }
    public string Property2 { get; set; }
    public string ExtraData { get; set; }
}
Mapper.CreateMap<Source, SourceViewModel>();

当我想从源映射到SourceViewModel,一切都很好,我只是没有ExtraData填充。但是我也想从一个SourceContainer映射到SourceViewModel,最好不指定每个属性的映射。

是否有可能告诉AutoMapper在进行映射时从子属性Source导入属性?比如:

Mapper.CreateMap<SourceContainer, SourceViewModel>()
    .UseMappingForProperty(x => x.Source);

否则,我可以单独告诉AutoMapper关于SourceViewModel上的每个属性,并从子源获取它,但我想知道是否有更优雅的方法。

AutoMapper从子节点获取属性

我将使用.ConstructUsing来初始化结果SourceViewModel与内部Source属性的映射:

Mapper.CreateMap<SourceContainer, SourceViewModel>()
    .ConstructUsing(container => Mapper.Map<SourceViewModel>(container.Source));

ExtraData将在SourceViewModel构造之后按惯例进行映射。