C# 使用多态性自动映射复杂类型?

C# 使用多态性自动映射复杂类型?,c#,automapper,C#,Automapper,我正在使用AutoMapper将我自己的复杂类型转换为其他人的web服务API使用的稍微复杂一些的类型 以下是我的类型: namespace Source { public class Order { public int OrderID { get; set; } public Client Client { get; set; } ... } public class ExistingClient : Clie

我正在使用AutoMapper将我自己的复杂类型转换为其他人的web服务API使用的稍微复杂一些的类型

以下是我的类型:

namespace Source
{
    public class Order
    {
        public int OrderID { get; set; }
        public Client Client { get; set; }
        ...
    }

    public class ExistingClient : Client
    {
        public int ClientID { get; set; }
        ...
    }

    public class NewClient : Client
    {
        public string Name { get; set; }
        ...
    }
}
我需要将这些转换为以下内容

namespace Target
{
    public class WebOrder
    {
        public int OrderID { get; set; }
        public WebClient { get; set; }
        ...
    }

    public class WebClient
    {
        public object Item // instance of NewWebClient or ExistingWebClient
    }

    public class ExistingWebClient
    {
        public int ClientID { get; set; }
        ...
    }

    public class NewWebClient
    {
        public string Name { get; set; }
        ...
    }
}
我已经创建了一个AutoMapper配置文件,其中包括以下CreateMap调用(还有一些)


我不知道这是否是最整洁的方法,但我最终决定使用自定义解析器类

public class ClientResolver : IValueResolver<Source.Client, Target.ClientWeb, object>
{
    public object Resolve(Source.Client source, Target.ClientWeb destination, object destMember, ResolutionContext context)
    {
        if (source is Source.NewClient)
        {
            return Mapper.Map<Source.NewClient, Target.NewClientWeb>(source as Source.NewClient);
        }
        else if (source is Source.ExistingClient)
        {
            return Mapper.Map<Source.ExistingClient, Target.ExistingClientWeb>(source as Source.ExistingClient);
        }
        return null;
    }
}
公共类ClientResolver:IValueResolver
{
公共对象解析(Source.Client源、Target.ClientWeb目标、object destMember、ResolutionContext上下文)
{
if(source是source.NewClient)
{
返回Mapper.Map(source作为source.NewClient);
}
else if(source是source.ExistingClient)
{
返回Mapper.Map(source作为source.ExistingClient);
}
返回null;
}
}

我不知道这是否是最简洁的方法,但我最终决定使用自定义解析器类

public class ClientResolver : IValueResolver<Source.Client, Target.ClientWeb, object>
{
    public object Resolve(Source.Client source, Target.ClientWeb destination, object destMember, ResolutionContext context)
    {
        if (source is Source.NewClient)
        {
            return Mapper.Map<Source.NewClient, Target.NewClientWeb>(source as Source.NewClient);
        }
        else if (source is Source.ExistingClient)
        {
            return Mapper.Map<Source.ExistingClient, Target.ExistingClientWeb>(source as Source.ExistingClient);
        }
        return null;
    }
}
公共类ClientResolver:IValueResolver
{
公共对象解析(Source.Client源、Target.ClientWeb目标、object destMember、ResolutionContext上下文)
{
if(source是source.NewClient)
{
返回Mapper.Map(source作为source.NewClient);
}
else if(source是source.ExistingClient)
{
返回Mapper.Map(source作为source.ExistingClient);
}
返回null;
}
}
public class ClientResolver : IValueResolver<Source.Client, Target.ClientWeb, object>
{
    public object Resolve(Source.Client source, Target.ClientWeb destination, object destMember, ResolutionContext context)
    {
        if (source is Source.NewClient)
        {
            return Mapper.Map<Source.NewClient, Target.NewClientWeb>(source as Source.NewClient);
        }
        else if (source is Source.ExistingClient)
        {
            return Mapper.Map<Source.ExistingClient, Target.ExistingClientWeb>(source as Source.ExistingClient);
        }
        return null;
    }
}