AutoMapper具有多种目标类型

时间:2014-11-16 23:06:16

标签: c# .net automapper

我正在尝试使用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属性。

1 个答案:

答案 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>();