繁体   English   中英

AutoMapper - Map 对象的属性(从 object 数组到字符串数组)

[英]AutoMapper - Map objects' properties (from object array to string array)

我有两个相似的对象,我正在使用 AutoMapper 相互映射。 我通过执行以下操作创建 map:

CreateMap<Object1, Object2>()
   .ForMember(d => d.Name, o => o.MapFrom(s => s.Name))
   .ForMember(d => d.Description, o => o.MapFrom(s => s.Description))

现在Object1有一个属性Object3[] listOfObject3这个Object3有一个Id属性,我想用string[] listOfObject3Ids map 到我的Object2属性

我尝试了以下方法,但这不起作用:

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.listOfObject3.Id, o => o.MapFrom(s => new [] {s.Id})

我该如何解决这个问题?

除了@Sebastian's answer to work with System.Linq这是正确的,

您还可以使用.ConvertUsing()方法。

  1. 通过.ConvertUsing()创建从Object3string的映射。

  2. Map 成员从Object1.listOfObject3Object2.listOfObject3Ids

CreateMap<Object3, string>()
    .ConvertUsing((src) => src.Id);
            
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));

演示 @ .NET 小提琴


参考

自定义类型转换器

你可以像这样 map :

    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.ListOfObject3, o => o.MapFrom(s => s.listOfObject3Ids.Select(id => new Object3 { Id = id })));

但正如我已经评论过的,我假设您的 Object2 包含 Object3 的列表,而您的 Object1 包含带有 ID 的列表。 然后你可以像这样 map :

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(o => o.Id)));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM