automapper怎么反射集合

我这里的写法是使用这样的,反射一个实体:

 private readonly IMapper _mapper;
var model = _mapper.Map<source>(dest);

错误的写法

var result=_mapper.Map<List<dest>>(source);

var result=_mapper.Map<List<souce>,List<dest>>(source);

这两种写法最开始我是以为可以的,但我没有加Profile文件,所以报如下错误:

Missing type map configuration or unsupported mapping.
 

那么在services层使用IMapper如何反射集合?

var configuration = new MapperConfiguration(cfg => {
                cfg.AllowNullCollections = true;
                cfg.CreateMap<source, dest>();
            });
            var result = new Mapper(configuration).Map<List<dest>>(source);

官方的示例

var configuration = new MapperConfiguration(cfg => cfg.CreateMap<Source, Destination>());

var sources = new[]
	{
		new Source { Value = 5 },
		new Source { Value = 6 },
		new Source { Value = 7 }
	};

IEnumerable<Destination> ienumerableDest = mapper.Map<Source[], IEnumerable<Destination>>(sources);
ICollection<Destination> icollectionDest = mapper.Map<Source[], ICollection<Destination>>(sources);
IList<Destination> ilistDest = mapper.Map<Source[], IList<Destination>>(sources);
List<Destination> listDest = mapper.Map<Source[], List<Destination>>(sources);
Destination[] arrayDest = mapper.Map<Source[], Destination[]>(sources);

如果不想那么复杂的每次去实例化一个MapperConfiguration

可以参考官方写的配置demo,将实例依赖注入容器中

Configuration — AutoMapper documentationhttps://docs.automapper.org/en/stable/Configuration.html官方给出的怎么映射集合和数组的链接如下:

Lists and Arrays — AutoMapper documentationhttps://docs.automapper.org/en/stable/Lists-and-arrays.html

可以自己新建一个MyProfile文件继承自automapper的Profile类

  CreateMap<source, dest>().ReverseMap();
   CreateMap<dest, source>().ReverseMap();

这时候在使用刚才的写法就不会报错。

var result= _mapper.Map<List<dest>>(source);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AutoMapper是一个用于对象映射的开源库。它可以帮助简化对象之间的转换过程,减少手动编写重复的代码。通过配置映射规则,AutoMapper可以自动将一个对象的属性值复制到另一个对象中对应的属性上,而不需要手动逐个属性进行赋值。 使用AutoMapper,你可以定义映射规则,包括源类型和目标类型以及它们之间的属性映射关系。一旦配置好映射规则,你可以使用简单的API将源对象映射到目标对象上。 以下是一个使用AutoMapper的示例: ```csharp // 定义源类型和目标类型 public class SourceObject { public string Name { get; set; } public int Age { get; set; } } public class DestinationObject { public string Name { get; set; } public int Age { get; set; } } // 配置映射规则 var config = new MapperConfiguration(cfg => { cfg.CreateMap<SourceObject, DestinationObject>(); }); // 创建映射器 var mapper = config.CreateMapper(); // 创建源对象 var source = new SourceObject { Name = "John", Age = 30 }; // 使用映射器进行对象映射 var destination = mapper.Map<SourceObject, DestinationObject>(source); // 输出目标对象属性值 Console.WriteLine(destination.Name); // 输出:John Console.WriteLine(destination.Age); // 输出:30 ``` 通过使用AutoMapper,你可以简化对象之间的映射过程,提高开发效率。它支持各种复杂的映射场景,并且可以通过自定义转换器来处理更复杂的映射逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值