我有代码,它使用userClass转换器。我想用automapper做同样的事情。如何重写代码?
cancel
第二个类(第一个来自System.Security.Claims;名称空间):
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
};
}
答案 0 :(得分:1)
你的映射看起来像这样:
AutoMapper.Mapper.CreateMap<ClaimsIdentity, ClaimIdentityView>()
.ForMember(dest => dest.ClaimViewList, opt => opt.MapFrom(src => src.Claims))
.ForMember(dest => dest.AuthenticationType,
opt => opt.MapFrom(src => (AuthenticationTypeEnum)
EnumStringValue.Parse(typeof (AuthenticationTypeEnum), src.AuthenticationType)));
AutoMapper.Mapper.CreateMap<Claim, ClaimView>();
示例映射代码:
var claimIdentity = new ClaimsIdentity(WindowsIdentity.GetCurrent());
var view = AutoMapper.Mapper.Map<ClaimsIdentity, ClaimIdentityView>(claimIdentity);
然后该测试将通过:
var claimIdentity = new ClaimsIdentity(WindowsIdentity.GetCurrent());
// realistically the current account will have claims, but..
claimIdentity.AddClaim(new Claim("Type", "Value"));
var view = AutoMapper.Mapper.Map<ClaimsIdentity, ClaimIdentityView>(claimIdentity);
Assert.IsTrue(view.ClaimViewList.Count > 0);