Automapper使用解析器序列化/反序列化源字符串列表

时间:2017-07-29 05:00:07

标签: c# asp.net-mvc asp.net-core asp.net-core-mvc automapper

我正在尝试将源字符串映射到成员List<T>,但映射成员列表属性的值始终为null。

这是我的代码。

//Source model
public class Claims
{  
    public int Id { get; set; } 
    public string ClaimType {get; set; } 
    public string ClaimValue { get; set; } // produce json string [{"Action":"read","Status":"active"}]
}

// Dest model
public class ClaimsDto
{  
   public int Id { get; set; }
   public string ClaimType { get; set; } 
   public List<ResourceActions> ClaimValues { get; set; }
}


public class ResourceActions
{
  public string Action { get; set; }
  public string Status { get; set; }
}



CreateMap<ResourceActions, ResourceActions>();

CreateMap<Claims, ClaimsDto>()
.ForMember(dest => dest.ClaimValues,
 opt => opt.MapFrom( src=> JsonConvert.DeserializeObject<List<ResourceActions>>(src.ClaimValue))) 
.ReverseMap();

还试过像这样的解析器。

 .ForMember(dto => dto.ClaimValues, opt => opt.ResolveUsing<CustomResolver,string>(src=>src.ClaimValue ))

解析器:

public class CustomResolver : IMemberValueResolver<Claims, ClaimsDto, string, List<ResourceActions>>
{
    public List<ResourceActions> Resolve(Claims source, ClaimsDto destination, string sourceMember, List<ResourceActions> destinationMember, ResolutionContext context)
    {
        var data = JsonConvert.DeserializeObject<List<ResourceActions>>(sourceMember);
        return context.Mapper.Map<List<ResourceActions>>(data); // not working
        return JsonConvert.DeserializeObject<List<ResourceActions>>(sourceMember); // not working
    }
}

和控制器

var mapped = _mapper.Map<List<ClaimsDto>>(source); // success without exception but the list property is null.

除了stringList<T>属性外,其他属性都已映射。

0 个答案:

没有答案