将继承对象列表的类映射到类似的类

本文关键字:映射 继承 列表 对象 | 更新日期: 2023-09-27 17:59:45

在我的项目中,我需要将对象从外部系统映射到DTO。我想映射的对象是:

public class PriceLists : List<PriceList> { }

我有在类中映射属性的想法,但很难找到这种情况的解决方案。我的DTO最好与这个源类"相同",以使其尽可能简单:

public class PriceListsDTO : List<PriceListDTO> { }

有没有一个简单的解决方案,或者我需要重构我的DTO对象?

谢谢。

编辑:我曾尝试为价目表列表创建映射,但在这个问题上没有成功。

Mapper.Initialize(cfg => { cfg.CreateMap<PriceList>, <PriceListDTO>(); });
Mapper.Initialize(cfg => { cfg.CreateMap<IList<PriceList>, IList<PriceListDTO>>(); });

第2版:

public class PriceList
{
    public string Agreement { get; set; }
    public Currency Currency { get; set; }
    public string Description { get; set; }
    public Nullable<DateTime> EndDate { get; set; }
    public int Id { get; set; }
    public Nullable<Guid> ImageKey { get; set; }
    public bool IsBid { get; set; }
    public bool IsLimitedToStock { get; set; }
    public bool IsPrimary { get; set; }
    public bool IsPublic { get; set; }
    public string Name { get; set; }
    public Nullable<DateTime> StartDate { get; set; }
    public int Type { get; set; }
}
public class PriceListDTO
{
    public string Agreement { get; set; }
    public CurrencyViewModel Currency { get; set; }
    public string Description { get; set; }
    public DateTime? EndDate { get; set; }
    public int Id { get; set; }
    public Guid? ImageKey { get; set; }
    public bool IsBid { get; set; }
    public bool IsLimitedToStock { get; set; }
    public bool IsPrimary { get; set; }
    public bool IsPublic { get; set; }
    public string Name { get; set; }
    public DateTime? StartDate { get; set; }
    public int Type { get; set; }
}

Currency类和DTO只包含字符串属性。

将继承对象列表的类映射到类似的类

从您给出的代码来看,您实际上从未告诉AutoMapper将DTO与模型类相关联。如果调用Initialize两次,第二次调用将删除任何以前的映射。尝试更新您的配置以执行以下操作:

Mapper.Initialize( cfg => {
    cfg.CreateMap<PriceList, PriceListDTO>()
       .ReverseMap();
    // Not sure if this is required if you already have the model/dto map 
    cfg.CreateMap<IList<PriceList>, IList<PriceListDTO>>();
    cfg.AssertConfigurationIsValid();
});
public class PriceList

public string Agreement { get; set; }
public Currency Currency { get; set; }
public string Description { get; set; }
public Nullable<DateTime> EndDate { get; set; }
public int Id { get; set; }
public Nullable<Guid> ImageKey { get; set; }
public bool IsBid { get; set; }
public bool IsLimitedToStock { get; set; }
public bool IsPrimary { get; set; }
public bool IsPublic { get; set; }
public string Name { get; set; }
public Nullable<DateTime> StartDate { get; set; }
public int Type { get; set; }

}

公共类PriceListDTO{公共字符串协议{get;set;}

public Currency Currency { get; set; }
public string Description { get; set; }
public DateTime? EndDate { get; set; }
public int Id { get; set; }
public Guid? ImageKey { get; set; }
public bool IsBid { get; set; }
public bool IsLimitedToStock { get; set; }
public bool IsPrimary { get; set; }
public bool IsPublic { get; set; }
public string Name { get; set; }
public DateTime? StartDate { get; set; }
public int Type { get; set; }

}

然后尝试automapper.mapper.createmap将为您工作,否则您需要使用formember方法进行映射currencyviewmodel中货币的属性,因为物体各不相同,试着用一下吧。希望能有所帮助为你。感谢