2017-02-28 273 views
1

我具有以下的类结构Automapper映射嵌套对象

public class ClassA 
{ 
    public ClassB objB; 
} 

Public class ClassB 
{ 
    public ListOfData objListofData; 
} 

public class ListOfData 
{ 
    public Employee objEmp; 
} 

public class Employee 
{ 
    public string FirstName; 
    public string LastName; 
} 

上述层次结构的返回类型将是

"ClassA":{ 
    "classB":{ 
     "ListOfData":{ 
      "employee":{ 
       "FirstName":"David", 
       "LastName" :"Peter" 
      } 
     } 
    } 
} 

我要地图雇员类EmployeeViewModel其中雇员名字和姓氏将被映射到employeeViewModel FullName属性。我可以通过下面的代码段

public class EmployeeViewModel 
{ 
    public FullName; 
} 


CreateMap<Employee,EmployeeViewModel>() 
         .ForMember(dest => dest.FullName, 
            opts => opts.MapFrom(
             src => string.Format("{0} {1}", 
             src.FirstName, src.LastName))); 

现在怎么办就回国了具有EmployeeViewModel的映射原始ClassA的对象实现这一目标。像这样?

"ClassA":{ 
    "classB":{ 
     "ListOfData":{ 
      "EmployeeViewModel":{ 
       "FullName":"David Peter" 
      } 
     } 
    } 
} 

回答

1

花时间阅读文档的量好后,我发现这里的解决方案是我的做法

一)创建类源&目的地类这样

public class ClassA 
{ 
    public ClassB objB; 
} 

Public class ClassB 
{ 
    public ListOfData objListofData; 
} 

public class ListOfData 
{ 
    public Employee objEmp; 
} 

public class Employee 
{ 
    public string FirstName; 
    public string LastName; 
} 
------------------------------------ 
public class DestClassA 
{ 
    public DestClassB objB; 
} 

Public class DestClassB 
{ 
    public DestListOfData objListofData; 
} 

public class DestListOfData 
{ 
    public DestEmployee objEmp; 
} 

public class EmployeeViewModel 
{ 
    public string FullName; 
} 

二)创建映射

var config = new MapperConfiguration(cfg => { 

    cfg.CreateMap<Employee, EmployeeViewModel>(). 
       ForMember(dest => dest.FullName, opts => opts.MapFrom(
        src => string.Format("{0} - {1}", 
        src.FirstName, src.LastName))); 
    cfg.CreateMap<ListOfData, DestListOfData>(); 
    cfg.CreateMap<GetFundFamilyOutOfBalanceTotalsResponse, GetFundFamilyOutOfBalanceTotalsResponseMapped>(); 
    cfg.CreateMap<ClassB, DestClassB>(); 
    cfg.CreateMap<ClassA, DestClassA>(); 
}); 

//这是为了确保你的映射是正确的牛逼

config.AssertConfigurationIsValid(); 

//你可以测试是否有望反对由automapper创建映射之后添加以下代码

var mapper = config.CreateMapper(); 
var output = new ClassA 
{ 
    objClassB = new ClassB 
    { 
     objListofData = new ListOfData 
     { 
      Employee = new [] 
       { 
        new Employee { FirstName = "David", LastName ="Peter" } 
       } 
     } 
    } 
}; 

var destMap = mapper.Map<DestClassA>(output); 

//如果你探索这个对象,你会发现这样的

对象struture
"ClassA":{ 
    "classB":{ 
     "ListOfData":{ 
      "EmployeeViewModel":{ 
       "FullName":"David Peter" 
      } 
     } 
    } 
}