如何使用AutoMapper从强类型列表映射到类型为:object的数组列表

时间:2014-09-29 15:19:47

标签: c# automapper

我需要将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);

2 个答案:

答案 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。