当目标类具有对象数组时,如何在C#中使用Auto Mapper映射两个类

时间:2018-10-24 12:17:22

标签: c# automapper

下面是带有类的映射器代码段:

Mapper.Initialize(cfg =>
 {
   cfg.CreateMap<STest, ETest>().ForMember(d => d.customFields[0].stringValue, o => o.MapFrom(s => s.val));
 }
);

var result = Mapper.Map<ETest>(JsonDeseriazedSource);
var serialized = JsonConvert.SerializeObject(result, Formatting.Indented);

这些是要映射的源和目标类:

//source class
  public class STest
    {
        public string Id { get; set; }
        public string val { get; set; }
    }

// destination class
  public class ETest
    {
        public string Id { get; set; }
        public Customfield[] customFields { get; set; }
    }
  public class Customfield
    {
        public string id { get; set; }
        public string fieldName { get; set; }
        public string stringValue { get; set; }
    }

我需要从Stest(源)中的val映射Customfield对象(目标)中的stringValue。

提前谢谢!

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,则可以尝试以下操作:

Mapper.Initialize(cfg =>
                 {
                    cfg.CreateMap<STest, Customfield>()
                        .ForMember(d => d.stringValue, o => o.MapFrom(s => s.val));
                    cfg.CreateMap<STest[], ETest>()
                        .ForMember(d => d.customFields, o => o.MapFrom(s => s.Select(Mapper.Map<Customfield>)));
                 });

var sTests= new[] { new STest { Id = "1", val = "val1" }, new STest { Id = "2", val = "val2" } };
var result = Mapper.Map<ETest>(sTests);