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