2017-02-28 9 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; 
} 

위 계층의 반환 유형은 내가 직원 이름 및 성이 매핑됩니다 EmployeeViewModel에 대한 직원 클래스를 매핑 할

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

것 employeeViewModel FullName 속성 내가 EmployeeViewModel의 매핑이 원래를 ClassA 객체를 다시 반환 할 어떻게 지금 코드

public class EmployeeViewModel 
{ 
    public FullName; 
} 


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

의 조각에 따라이 작업을 수행 할 수 있습니다. 이 같은 ??

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

답변

1

시간 독서 문서의 좋은 금액을 지출 후, 나는 솔루션은 여기 내 접근

입니다 발견

a)이

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>(); 
}); 

// 매핑이 정확한지 확인하는 것입니다. automapper에 의해 만들어진 반대 예상되는 경우 테스트, 매핑 후 다음 코드를 추가 할 수 있습니다 // t

config.AssertConfigurationIsValid(); 

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" 
      } 
     } 
    } 
}