我需要将DTO对象映射到我的webservice将接受的对象。
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.TerminationCauseServicePurchase而不是ExternalUdbudsportal.TerminationCauseServicePurchase)。
地图方法:
upEkst.TerminationCause tmpTC = Mapper.Map<DTO.TerminationCause, upEkst.TerminationCause>(tc);
答案 0 :(得分:0)
我的解决方案:
由于AutoMapper没有自动映射内部object[]
数组,因此我从DTO List<TerminationCauseServicePurchase>
对象中取出TerminationCause
并使用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;
答案 1 :(得分:0)
您可以使用最新的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);
其中model
是IEnumerable或List。