C# 自动映射和继承:按字符串属性解析子类类型

C# 自动映射和继承:按字符串属性解析子类类型,c#,inheritance,automapper,dotnetopenauth,C#,Inheritance,Automapper,Dotnetopenauth,基本上我有实体: public abstract class SocialNetworkAccount { public virtual string AccessToken { get; set; } public virtual string ProviderUserId { get; set; } public virtual string UserName { get; set; } } 和子类: public class

基本上我有实体:

public abstract class SocialNetworkAccount
    {
        public virtual string AccessToken { get; set; }
        public virtual string ProviderUserId { get; set; }
        public virtual string UserName { get; set; }
    }
和子类:

public class FacebookAccount : SocialNetworkAccount
    {
        public virtual string Name { get; set; }
        public virtual string Link { get; set; }
        public virtual GenderEnum Gender { get; set; }
    }
public class LinkedInAccount : SocialNetworkAccount
{
    public virtual string LastName { get; set; }
    public virtual string FirstName { get; set; }
}
我需要映射到我的实体

AuthenticationResult
具有字符串属性
Provider

AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication("...");
SocialNetworkAccount account = AutoMapper.Mapper.Map<SocialNetworkAccount>(result);
AuthenticationResult=OAuthWebSecurity.VerifyAuthentication(“…”);
SocialNetworkAccount=AutoMapper.Mapper.Map(结果);
但我需要实例是
FacebookAccount
linkedincount
依赖于
result.Provider

任何帮助都应手动处理提供程序值。我建议您创建从AuthenticationResult到您需要的每个社交网络帐户类型的映射。然后只需在扩展方法中调用适当的映射:

public static SocialNetworkAccount ToSocialNetworkAccount(
   this AuthenticationResult result)
{
    switch(result.Provider)
    {
        case "facebook": return Mapper.Map<FacebookAccount>(result);
        case "linkedin": return Mapper.Map<LinkedInAccount>(result);
        // ...
        default:
           throw new ArgumentException("Unknown provider: " + result.Provider);
    }
}

提供者
字符串究竟包含什么?类型名称?包含类似facebook的字符串
AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication("...");
SocialNetworkAccount account = result.ToSocialNetworkAccount();