Automapper:通过扁平化的属性命名约定不工作

问题描述 投票:1回答:2

我想我的数据结构向扁平化的DTO。

我的源类(简体)是这样的:

public class DeliveryNote
{
    public DeliveryNoteNested DeliveryNoteNestedInstance { get; set; }
    public string VehicleNo { get; set; }
}

public class DeliveryNoteNested
{
    public string No { get; set; }
    public string PlantNo { get; set; }
}

我的DTO(简体太)喜欢

public class DeliveryNoteDto
{
    public int Id { get; set; }
    public string No { get; set; }
    public string PlantNo { get; set; }
    public string VehicleNo { get; set; }
}

然后,我做我的映射:

Mapper.Initialize(cfg => cfg.CreateMap<DeliveryNote, DeliveryNoteDto>());
var source = new DeliveryNote
{
    VehicleNo = "VehicleNo20",
    DeliveryNoteNestedInstance = new DeliveryNoteNested
    {
        No = "42",
        PlantNo = "PlantNo10"
    }
};
var dto = Mapper.Map<DeliveryNoteDto>(source);

最后我希望我的财产没有和PlantNo被命名约定填入DTO,但事实并非如此。

当我做

Mapper.Initialize(cfg => cfg.CreateMap<DeliveryNote, DeliveryNoteDto>()
                                    .ForMember(dest => dest.No, opt => opt.MapFrom(src => src.DeliveryNoteNestedInstance.No))
                                    .ForMember(dest => dest.PlantNo, opt => opt.MapFrom(src => src.DeliveryNoteNestedInstance.PlantNo)));

它的工作原理,但我真正的I类有近50家媒体,我想尽可能避免这种锅炉板代码。

c# .net-core automapper
2个回答
1
投票

基本公约将是

public class DeliveryNoteDto
{
    public int Id { get; set; }
    public string DeliveryNoteNestedInstanceNo { get; set; }
    public string DeliveryNoteNestedInstancePlantNo { get; set; }
    public string VehicleNo { get; set; }
}

0
投票

您还可以使用

 CreateMap(typeof(DeliveryNote), typeof(DeliveryNoteDto))
     .AfterMap((s, d) => Mapper.Map(s.DeliveryNoteNested, d));
© www.soinside.com 2019 - 2024. All rights reserved.