AutoMapper实现对象数组到字符串数组的属性映射问题
解决AutoMapper数组属性映射问题
你的代码存在两个关键错误:
- 目标成员引用错误:应映射到
Object2的listOfObject3Ids属性,而非不存在的d.listOfObject3.Id - 映射逻辑错误:需要从源数组的每个元素中提取
Id,而非创建仅包含单个Id的数组
正确的映射代码
如果Object3.Id本身就是string类型:
CreateMap<Object1, Object2>() .ForMember(d => d.Name, o => o.MapFrom(s => s.Name)) .ForMember(d => d.Description, o => o.MapFrom(s => s.Description)) .ForMember(d => d.listOfObject3Ids, o => o.MapFrom(s => s.listOfObject3?.Select(obj3 => obj3.Id).ToArray() ));
如果Object3.Id是数值类型(比如int),需要转换为string:
CreateMap<Object1, Object2>() .ForMember(d => d.Name, o => o.MapFrom(s => s.Name)) .ForMember(d => d.Description, o => o.MapFrom(s => s.Description)) .ForMember(d => d.listOfObject3Ids, o => o.MapFrom(s => s.listOfObject3?.Select(obj3 => obj3.Id.ToString()).ToArray() ));
代码说明
s.listOfObject3?.Select(...):用空条件运算符?.避免源数组为null时抛出异常Select(obj3 => obj3.Id):遍历源数组的每个Object3元素,提取其Id属性.ToArray():将LINQ查询结果转换为数组,匹配目标属性的string[]类型
内容的提问来源于stack exchange,提问作者zaakm
相关产品推荐
相关产品推荐

