自动映射器,将一个对象成员类型映射到多个具体类型



我有一个 Party 类,其中包含来自服务的 object 数据类型。 它可以包含 Item 属性的两种不同的成员类型。

public class Party
{
    public string DMVID {get; set;}
    public object Item { get; set; }
}

和这个 DTO

public class PartyDTO
{
    public string DMVID {get; set;}
    public BusinessDTO BusinessItem { get; set; }
    public IndividualDTO IndividualItem { get; set; }
}

如何将Item的输出映射到BusinessItemIndividualItem。我知道这个行不通。 Mapper.CreateMap<Party, PartyDTO>();我不知道条件映射是否可以解决这个问题或像这样的解析器。

嘿,也许这会帮助你!我测试了它,但我只使用自动映射器两天!

好的,这是您注意到的课程!!

    public class Party
{
    public string DMVID { get; set; }
    public object Item { get; set; }
}

public class PartyDTO
{
    public string DMVID { get; set; }
    public BuisnessDTO BusinessItem { get; set; }
    public IndividualDTO IndividualItem { get; set; }
}

public class BuisnessDTO
{
    public int Number
    {
        get;
        set;
    }
}
public class IndividualDTO
{
    public string Message
    {
        get;
        set;
    }
}

这是当前方案的映射器配置!

    // Edit There was no need here for some conditions
  AutoMapper.Mapper.CreateMap<Party, PartyDTO>()
                .ForMember(dto => dto.BusinessItem, map => 
                    map.MapFrom(party => party.Item as BuisnessDTO);
                )
                .ForMember(dto => dto.IndividualItem, map =>
                    map.MapFrom(party => party.Item as IndividualDTO);
                );
    // And this is another way to achive the mapping in this scenario
                AutoMapper.Mapper.CreateMap<PartyDTO, Party>()
                    .ForMember(party => party.Item, map => map.MapFrom( dto => (dto.BusinessItem != null) ? (dto.BusinessItem as object) : (dto.IndividualItem as object)));

我为它创建了此示例!

            Party firstParty = new Party()
        {
            DMVID = "something",
            Item = new BuisnessDTO()
            {
                Number = 1
            }
        };

        Party secondParty = new Party()
        {
            DMVID = "something",
            Item = new IndividualDTO()
            {
                Message = "message"
            }
        };

        PartyDTO dtoWithBuisness = AutoMapper.Mapper.Map<PartyDTO>(firstParty);
        PartyDTO dtoWithIndividual = AutoMapper.Mapper.Map < PartyDTO>(secondParty);
        Party afterParty = AutoMapper.Mapper.Map<Party>(dtoWithBuisness);
        afterParty = AutoMapper.Mapper.Map < Party>(dtoWithIndividual);

当然还有其他可能性,但我认为这正是你想要的。

最新更新