我正在尝试使用AutoMapper将源类型映射到两种目标类型:
public class Source
{
public string Value1 { get; set; }
public string Value2 { get; set; }
public Source[] Values { get; set; }
}
public interface IDest
{
}
public class DestinationSimple : IDest
{
public string Value1 { get; set; }
}
public class DestinationComplex : IDest
{
public string Value2 { get; set; }
public IDest[] Values { get; set; }
}
要映射到的目标类型应基于源类型中的属性值。如果Source中的Value1不为null,则目标类型应为DestinationSimple。否则目标类型应为DestinationComplex。
哪种方式最好继续?我曾尝试使用自定义类型转换器,但我无法使其工作,因为我不知道如何处理Values属性。
答案 0 :(得分:0)
以下是使用自定义类型转换器执行此操作的一种方法:
public class IDestConverter : TypeConverter<Source, IDest>
{
protected override IDest ConvertCore(Source src)
{
IDest result = null;
if (src.Value1 != null)
{
result = new DestinationSimple
{
Value1 = src.Value1
};
}
else
{
result = new DestinationComplex
{
Value2 = src.Value2,
Values = Mapper.Map<IDest[]>(src.Values)
};
}
return result;
}
}
用法:
Mapper.CreateMap<Source, IDest>()
.ConvertUsing<IDestConverter>();