2017-11-24 9 views
2

dynamic 유형의 매개 변수가있는 ASP.NET 코어 컨트롤러 메서드에서 아래와 같이 Automapper를 사용하여 매핑하고 싶습니다. 상기 방법은 다음과 같다 :Automapper를 사용하여 다중 맵을 만들지 않고 동적/JObject에서 임의의 유형으로 매핑

public IActionRsult Post([FromBody] dynamic model) { 
    // Skip validation 
    switch(model.src) { 
    case "employer" 
     var employerVM = _mapper.Map<EmployerViewModel>(model.data); 
     // Work with mapped object 
    break; 
    case "employee" 
     var employeeVM = _mapper.Map<EmployeeViewModel>(model.data); 
     // Work with mapped object 
    break; 
    } 
} 

EmployerViewModel는 다음과 같다 여기서

public class EmployerViewModel { 
    public string CompanyName {get; set;} 
    public string CompanyAddress {get; set;} 
} 

EmployeeViewModel을 다음과 같다 :

public class EmployeeViewModel { 
    public string FirstName {get; set;} 
    public string LastName {get; set;} 
    public bool Ready {get; set;} 
} 

이되는 수 클라이언트 측에서 JSON 데이터를 수신 모양 :

{ 
    "src": "employer", 
    "data": { 
    "CompanyName": "Pioneers Ltd.", 
    "CompanyAddress": "126 Schumacher St., London" 
    } 
} 
,

나이 :

{ 
    "src": "employee", 
    "data": { 
    "FirstName": "John", 
    "LastName": "Doe", 
    "Ready": true 
    } 
} 

이제 모든 관계없이 항상 JSON의 값이 무엇인지 false로 설정되지 부울 속성을 제외하고 잘 작동합니다. JSON 입력 포맷터를 사용하여 매개 변수에서 인스턴스를 생성합니다. 인스턴스의 유형을 확인한 후 Newtonsoft라는 것을 발견했습니다 .Json.Linq.JObject

bool을 올바르게 작동 시키려면 어떤 아이디어가 필요합니까?

각각에 대해 AutoMapper 맵을 명시 적으로 구성 할 필요없이 TDestination IMapper.Map<TDestination>(object source) (here 참조)을 사용하여 임의의 수의 대상 클래스 매핑을 계속 지원하고 싶습니다. 이것이 어떻게 달성 될 수 있는지 어떤 힌트?

P. AutoMapper 6.2.1 및 ASP.NET Core 1.1.3을 사용하고 있습니다.

+0

예를 들어 ExpandoObject와 함께 작동하므로 모델을 결합하는 방법에 대한 질문입니다. –

+0

JSON 입력 포맷터는 동적 매개 변수 모델 – Bahaa

+0

안에 Newtonsoft.Json.Linq.JObject 인스턴스를 포함합니다. 그러면 조사해야 할 내용입니다. AM에 관한 한, 그것은 효과적입니다. –

답변

1

문제는 JObject가 JValue-s에서 내용을 래핑하기 때문에 기본적으로 실제 값을 예상하는 AM에서는 작동하지 않습니다. 따라서 AM에 JValue를 매핑하는 방법을 알려야합니다.

cfg.CreateMap<JValue, object>().ConvertUsing(s=>s.Value); 
+0

그랬습니다!. 감사. 이 변환기 구성을 AutoMapper 매핑 프로파일에 추가 한 후 작동했습니다. – Bahaa