如何使用 AutoMapper 将两个嵌套对象合并为一个

How to merge two nested object into one using AutoMapper

您好,我一直在使用 AutoMapper 来转换我的对象,现在我正在尝试将两个嵌套对象合并为一个,但我不知道该怎么做。

我有以下代码:

这些是我的源对象

class SourceSubItemA
{
    string subPropertyA;
}

class SourceSubItemB
{
    string subPropertyB;
}

class Source
{
    SourceSubItemA subItemA;
    SourceSubItemB subItemB;
}

目标对象

class DestinationSubItem
{
    string propertyA;
    string propertyB;
}

class Destination
{
    DestinationSubItem destItem;
}

这是我的 Automapper 配置

Mapper.CreateMap<SourceSubItemA, DestinationSubItem>()
    .ForMember(dest => propertyA, opt => opt.MapFrom(src => src.subPropertyA));

Mapper.CreateMap<SourceSubItemB, DestinationSubItem>()
    .ForMember(dest => propertyB, opt => opt.MapFrom(src => src.subPropertyB));

// Probably I have to do something more here.
Mapper.CreateMap<Source, Destination>()
    .ForMember(dest => dest.destItem, opt => opt.MapFrom(src => src.subItemA)); 

最后我通过这种方式使用映射器

Mapper.Map<Destination>(sourceObject);

预期结果必须是一个 Destination 对象,其子项同时填充了两个属性。

请帮忙!

如我所见,Destination 只是 DestinationSubItem 的包装器,它是真正需要从 Source.

获取值的包装器

在这种情况下,您可以定义一个从 SourceDestination 的映射器,将 Source 直接映射到 DestinationSubItem 的结果放入 dest.destItem ].

举个例子:

    Mapper.CreateMap<Source, Destination>()
      .ForMember(dest => dest.destItem, opt => opt.MapFrom(src => Mapper.Map<DestinationSubItem>(src)); 

    Mapper.CreateMap<Source, DestinationSubItem>()
      .ForMember(dest => dest.propertyA, opt => opt.MapFrom(src => src.subItemA.subPropertyA)
      .ForMember(dest => dest.propertyB, opt => opt.MapFrom(src => src.subItemB.subPropertyB);