我需要将 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 的集合,所以如何判断它是什么情况呢?
提前致谢!
答案 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
,而不是像我一样手动操作。