自动映射转换器

时间:2015-11-26 11:02:45

标签: c# automapper

我有代码,它使用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
     };
}

1 个答案:

答案 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);