Automapper Map Property as Collection

时间:2012-01-30 02:16:13

标签: automapper

我需要将 ICustomerAddresses 映射到我自己的自定义对象地址,或列表<地址> 。如何使用automapper指示属性Customer.ICustomerAddresses映射到我的自定义地址?

为了说明,我有一个界面,其属性如下所示:

public interface ICustomer
{
    ICustomerAddresses Addresses;
}

在这种情况下,ICustomerAddresses是ICustomerAddress的集合。但是,ICustomerAddress不是一个简单的IEnumerable,它包含包含集合的属性,如下所示:

public interface ICustomerAddresses : IBusinessObjectCollection
  {
    ICustomerAddress this[int nIndex] { get; }

    ICustomerAddress CreateNew();

    ICustomerAddress AddNew();

  }

Automapper自身无法弄清楚 ICustomerAddresses 实际上只是 ICustomerAddress 的集合,所以如何判断它是什么情况呢?

提前致谢!

1 个答案:

答案 0 :(得分:0)

自定义类型转换器应该可以正常工作。这是一个简单的例子(抛在一起 - 未经测试)。另外,我在ICustomerAddresses添加了一个“长度”属性,所以我知道要循环多少:

public class AddressConverter : TypeConverter<ICustomerAddresses, IList<Address>>
{
    protected override IList<Address> ConvertCore(ICustomerAddresses source)
    {
        var addresses = new List<Address>();
        for (var i = 0; i < source.Length; i++)
        {
            var addr = source[i];
            addresses.Add(new Address
                            {
                                Addr1 = addr.Addr1, 
                                Zip = addr.Zip
                            });
        }

        return addresses;
    }
}

你也可以在循环中利用Automapper将ICustomerAddress转换为Address,而不是像我一样手动操作。