使用AutoMapper,是否可以将属性值映射到属性?

时间:2016-01-31 13:59:32

标签: c# automapper

我正在使用AutoMapper for C#,我正在尝试将属性值转换为属性名称。

请考虑以下事项:

ClassB b1 = new ClassB() {Name = "ParamA", Val = "ValueA"};
ClassB b2 = new ClassB() {Name = "ParamB", Val = "ValueB"};
ClassB b3 = new ClassB() {Name = "ParamC", Val = "ValueC"};
List<ClassB> listB = new List<ClassB>() {b1, b2, b3};

我有一个ClassB实例列表,我试图根据“Name”的值将ClassB的“Val”属性值转换为ClassA的正确属性:

ClassA

因此,使用listB我正在尝试使用ParamA = "ValueA"ParamB = "ValueB"创建#pragma config JTAGEN = OFF // JTAG Enable OFF (only use for '250) #pragma config FNOSC = FRCPLL // Fast RC w PLL 8mHz internal rc Osc #pragma config FPLLIDIV = DIV_10 // PLL in 8mHz/10 = 800 kHz #pragma config FPLLMUL = MUL_15 // PLL mul 800 khz * 15 = 12 Mhz #pragma config FPLLODIV = DIV_64 // PLL Out: 12MHz / 64 187.5 kHz #pragma config FPBDIV = DIV_1 // Peripheral Bus Divisor #pragma config FCKSM = CSECME // Clock Switch Enable, FSCM Enabled #pragma config POSCMOD = OFF // Primary osc disabled #pragma config IESO = OFF // Internal/external switch over #pragma config OSCIOFNC = OFF // CLKO Output Signal Active on the OSCO Pin #pragma config FWDTEN = OFF // Watchdog Timer Enable: 类型的对象,是否可以使用AutoMapper或任何其他工具?

2 个答案:

答案 0 :(得分:1)

  

是否可以使用AutoMapper或任何其他工具?

您可以使用Reflection执行以下操作:

ClassA a = new ClassA();

foreach (var b in listB)
{
    typeof(ClassA)
        .GetProperty(b.Name) //Get property of ClassA of which name is b.Name
        .SetValue(a , b.Val); //Set the value of such property on object a
}

请注意,根据您的问题,ClassA应该有一个名为ParamC的媒体资源。

答案 1 :(得分:1)

我曾经发现过这段代码on SO而我正在使用它来处理这些事情。您将此扩展方法放入您的班级:

    public object this[string propertyName]
    {
      get { return this.GetType().GetProperty(propertyName).GetValue(this, null); }
      set { this.GetType().GetProperty(propertyName).SetValue(this, value, null); }
    }

然后你可以用[]来做

ClassA a;
ClassB b;
...
a[b.Name] = b.Val;