如何使用AutoMapper从强类型列表映射到类型为object的数组列表
本文关键字:列表 类型 object 数组 映射 何使用 AutoMapper 强类型 | 更新日期: 2023-09-27 18:24:55
我需要将DTO对象映射到我的Web服务将接受的对象。
DTO对象:
public class TerminationCause
{
// other properties...
public List<TerminationCauseServicePurchase> TerminationCauseServicePurchase { get; set; }
public TerminationCause()
{
TerminationCauseServicePurchase = new List<TerminationCauseServicePurchase>();
}
}
Web服务对象:
public partial class TerminationCause
{
public object[] TerminationCauseServicePurchase { get; set; }
// other properties...
}
所有"其他属性"都具有相同的名称,TerminationCauseServicePurchase类也相同。问题是没有映射字段TerminationCauseServicePurchase。
以下是映射:
Mapper.CreateMap<DTO.TerminationCause, ExternalUdbudsportal.TerminationCause>();
Mapper.CreateMap<DTO.TerminationCauseServicePurchase, ExternalUdbudsportal.TerminationCauseServicePurchase>();
TerminationCause对象得到了正确映射,但其内部列表"TerminationCauseServicePurchase"仍然是web服务不接受的相同类型(DTO.TerminationCouseServicePurPurchase而不是ExternalUdbudsportal.TerminationCauseServicePurchasy)。
地图方法:
upEkst.TerminationCause tmpTC = Mapper.Map<DTO.TerminationCause, upEkst.TerminationCause>(tc);
我的解决方案:
由于AutoMapper不会自动映射内部object[]
数组,因此我从DTOTerminationCause
对象中取出List<TerminationCauseServicePurchase>
,并使用AutoMapper显式映射它。
upEkst.TerminationCause tmpTC = Mapper.Map<DTO.TerminationCause, upEkst.TerminationCause>(tc);
var tmpTCSPList = Mapper.Map<List<DTO.TerminationCauseServicePurchase>,
upEkst.TerminationCauseServicePurchase[]>(tc.TerminationCauseServicePurchase);
tmpTC.TerminationCauseServicePurchase = tmpTCSPList;
您可以使用最新的Automapper创建一个自定义函数来实现这一点。它使用CreateMissingTypeMaps属性。
public static T[] MapDynamicList<T>(IEnumerable<YOUR_CUSTOM_CLASS> obj)
{
var config = new MapperConfiguration(c => c.CreateMissingTypeMaps = true);
var mapper = config.CreateMapper();
var newModel = obj.Select(mapper.Map<T>).ToArray();
return newModel;
}
然后你只需要用这一行代码调用函数:
var viewModel = Models.Helper.MapDynamicList<object>(model);
其中CCD_ 4是IEnumerable或List。