我有两堂课
public class SourceClass
{
public Guid Id { get; set; }
public string Provider { get; set; }
}
public class DestinationClass
{
public Guid Id { get; set; }
public List<string> Provider { get; set; }
}
我已经使用以下代码初始化了映射
CreateMap<SourceClass, DestinationClass>();
然后在我的控制器中,我有:
Mapper.Map<List<DestinationClass>>(requests)
其中“请求”是要传递到我的控制器中的SourceClass对象的列表。
我的问题是,如何将SourceClass中的Provider(类型为字符串)映射到Provider(目标类中为List类型的提供者?
sourceclass中的提供者将始终为单个字符串,而目标类中的提供者将始终为单个字符串的列表。
这是我在映射配置中尝试过的内容:
CreateMap<SourceClass, DestinationClass>().ForMember(destinationMember => destinationMember.Provider,
memberOptions => memberOptions.MapFrom(src => {
return string.IsNullOrEmpty(src.Provider) ? [""] : src.Provider.ToList());
首先,我建议您将目标属性重命名为Providers
,以避免造成混淆/表示它是一个集合。然后您可以尝试一下
CreateMap<SourceClass, DestinationClass>()
.ForMember(destinationMember => destinationMember.Providers,
memberOptions => memberOptions.MapFrom(src => new List<string> {src.Provider ?? ""}));
特别是此位
src => new List<string> {src.Provider ?? ""}
使用一个值创建一个新的字符串类型列表,该值可以为src.Provider
,如果为空,则为空字符串。
如果将源成员的Provider属性转换为列表,则将获得char类型的列表。此代码应反映您的需求。
CreateMap<SourceClass, DestinationClass>()
.ForMember(
destinationMember => destinationMember.Provider,
memberOptions => memberOptions.MapFrom(
src => string.IsNullOrEmpty(src.Provider) ? new List<string>() { "" } : new List<string> { src.Provider }
)
);
用这个替换您的映射配置:
CreateMap<SourceClass, DestinationClass>()
.ForMember(destinationMember => destinationMember.Provider,
memberOptions => memberOptions
.MapFrom(src =>
{
return new List<string>{ string.IsNullOrEmpty(src.Provider) ? "" : src.Provider)
});