2

我想映射类(实体),

public class Source {
   public int x;
   public string y;
   public bool z;

   public int a;
   public int b;
   public int c;

   //bunch of other fields
   //...
   //..
   //.
}

到以下类(视图模型):

public class Destination {
   public MyClass1 A;
   public MyClass2 B;
}

其中 MyClass1、MyClass2 定义如下:

public class MyClass1 {
   public int x;
   public string y;
   public bool z;
}

public class MyClass2 {
   public int a;
   public int b;
   public int c;
}

Automapper可以做到这一点吗?

4

2 回答 2

7

刚刚测试了这个,它可以独立工作......

        Mapper.CreateMap<Source, MyClass1>();
        Mapper.CreateMap<Source, MyClass2>();

        Mapper.CreateMap<Source, Destination>()
            .ForMember(x => x.A, m => m.MapFrom(p => p))
            .ForMember(x => x.B, m => m.MapFrom(p => p));


        var source = new Source() { a = 1, b = 2, c = 3, x = 4, y = "test", z = true };
        var destination = new Destination() { A = new MyClass1(), B = new MyClass2() };
        Mapper.Map<Source, Destination>(source, destination);
于 2012-10-31T18:22:38.493 回答
1

Automapper 自动处理展平这似乎是您在这里所要求的。但是,它与通常的方式相反,因此它可能会窒息。如果是这样,您可以使用单独.ForMember()的映射来处理它。

在您的情况下,它看起来类似于以下内容:

Mapper.CreateMap<Source, Destination>()
    .ForMember(cv => cv.Destination, m => m.MapFrom(
    s => new Class1(s.x, s.y, s.z))

我现在没有能力在环境中运行它,所以请指出任何语法错误,我会纠正它们。

于 2012-10-31T18:13:10.810 回答