2014-10-15 5 views
0

이의 다음과 같은 복잡한 JSON 응답이으로 반복은

{ 
     "query": "search", 
     "skills": { 
      "skill": [ 
       "php", 
       "java", 
       "C#" 
      ] 
     }, 
     "results": [ 
      { 
       "name": "jim", 
       "dept": "technology" 
      }, 
      { 
       "name": "peter", 
       "dept": "technology" 
      } 
     ] 
} 

그것의 형식이 고정되는 원격 서비스로 다시 보냈습니다 내가 문자열로 저장 한 가정 해 봅시다 값

string jsonString = JsonConvert.SerializeObject(Res); 

와 나는 응답 모델

public class Response 
{ 
    public string query { get; set; }  
    public Skill skills { get; set; } 
    public List<Employees> results { get; set; } 
} 

public class Skill 
{ 
    public List<string> skill { get; set; } 

} 

public class Employees 
{ 
    public string name { get; set; } 
    public string dept { get; set; } 
} 

이 있고 내가보기 모델

public class EmployeeExperts { 
     public List<EmployeeInfo> employee { get; set; } 
} 

public class EmployeeInfo { 
     public string name { get; set; } 
     public string dept { get; set; } 
} 

그리고 내 EmployeeExperts보기 모델에서 PLC로

var Obj = JsonConvert.DeserializeObject<Response>(jsonString); 

어떻게 그때의 Obj 반복과를 연결 것이다 클래스에 대한 응답을 직렬화 복원 한?

EmployeeExperts.EmployeeInfo [0] = Response.results [0] .name

응답을 올바르게 구문 분석하고보기에 표시하려고합니다. 또한, 나는 또 다른 질문을 가지고있다 - 이것 모두를하는 올바른 방법인가?

답변

1

처음에는 귀하의 EmployeesEmployeeInfo이 동일하다는 것을 알았으므로 필요하지 않습니다.

public class EmployeeExperts { 
     public List<Employee> Employees { get; set; } 
} 

을 그리고 지금 당신이 쓸 수 있습니다 :

다음과 같이 EmployeeExperts 클래스를 변경할 수 있습니다

var Obj = JsonConvert.DeserializeObject<Response>(jsonString); 
var experts = new EmployeeExperts(); 

// You can directly assign list like this and iterate through `experts.Employees` list 
experts.Employees = obj.results; 

참고 : 나는 위의 코드를 테스트하지 않은, 당신은 List<Employee>에 결과를 캐스팅해야 할 수도 있습니다.

또한 다른 질문이 있습니다.이 모든 것이 올바른 방법인가요?

나는 이러한 개체 - 개체 변환에 AutoMapper을 사용했습니다. 유연하고 95 %의 경우를 처리합니다. 이러한 95 %의 경우에는 전환에 소비하는 많은 시간을 절약 할 수 있습니다.

귀하의 목적에 부합하는지보십시오.