0
我有代码,它使用userClass转换器。我想用automapper来做同样的事情。如何重写代码?通过转换器自动映射器
public static ClaimIdentityView ConvertToClaimIdentityView(this ClaimsIdentity Identity)
{
ClaimIdentityView result = new ClaimIdentityView()
{
Name = Identity.Name,
NameClaimType = Identity.NameClaimType,
AuthenticationType = (AuthenticationTypeEnum)EnumStringValue.Parse(typeof(AuthenticationTypeEnum), Identity.AuthenticationType),
RoleClaimType = Identity.RoleClaimType
};
foreach (Claim item in Identity.Claims)
result.ClaimViewList.Add(item.ConvertToClaimView());
return result;
}
public static ClaimView ConvertToClaimView(this Claim Claim)
{
return new ClaimView()
{
Type = Claim.Type,
Value = Claim.Value,
ValueType = Claim.ValueType
};
}
和所述第二类(第一个是从System.Security.Claims;命名空间):
public class ClaimIdentityView
{
public ClaimIdentityView()
{
ClaimViewList = new List<ClaimView>();
}
public Guid UserId { get; set; }
public AuthenticationTypeEnum AuthenticationType { get; set; }
public IList<ClaimView> ClaimViewList { get; set; }
public string Name { get; set; }
public string NameClaimType { get; set; }
public string RoleClaimType { get; set; }
}
是的,但如何在映射ClaimView期间填写ClaimViewList? automapper是否支持委托或什么? – user3818229
ClaimViewList是ClaimViews的列表,AutoMapper知道如何将Claim映射到ClaimView,以及如何将列表映射到列表。我忘了添加一个告诉AutoMapper如何链接属性的位,因为它们有不同的名称,我编辑了答案。 – stuartd
我的意思是说你错过了这个循环: foreach(Identity.Claims中的声明项) result.ClaimViewList.Add(item.ConvertToClaimView());因此,我需要这样做: /.../.AfterMap((src,dest)=> dest.ClaimViewList.Concat(src.Claims)); 但我不知道如何正确使用它。 – user3818229