【发布时间】:2022-04-08 18:36:39
【问题描述】:
我正在尝试将源字符串映射到成员的List<T>,但映射的成员列表属性的值始终为空。
这是我的代码。
//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.
除此 string 之外的其他属性已映射到 List<T> 属性。
【问题讨论】:
-
请同时提供你的json
-
source的值是多少?我已经试用了你的代码,它对我有用。 -
@rigoryants-artem 此源 json 需要将
[{"Action":"create","Status":"active"},{"Action":"read","Status":"active"},{"Action":"update","Status":"active"},{"Action":"delete","Status":"active"}]映射到此目标属性public List<ResourceActions> ClaimValues { get; set; } -
@Patko 你能按照你的做法创建一个到 GitHub 的仓库吗?谢谢。
标签: c# asp.net-mvc asp.net-core asp.net-core-mvc automapper