具有多个目标类型的自动映射器
本文关键字:映射 类型 目标 | 更新日期: 2023-09-27 18:30:33
我正在尝试使用自动映射器将源类型映射到两个目标类型:
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; }
}
要映射到的目标类型应基于源类型中的属性值。如果源中的值 1 不为空,则目标类型应为目标简单。否则,目标类型应为"目标复杂"。
哪种方式最好?我尝试使用自定义类型转换器,但由于我不知道如何处理 Values 属性,因此无法使其工作。
以下是使用自定义类型转换器执行此操作的一种方法:
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>();