2017-03-21 5 views
1

대학 목록을 List<string>에 써야합니다. 나는 이미 목록에 국가와 도시를 썼다. 그러나 대학에서는 데이터가 약간 다릅니다. {"response":[201,이 있는데 어떻게 처리해야할지 전혀 알지 못합니다. 나는 here에서 성공적으로 나라를 얻었다. 그리고 here에서 List<string>에 대학 타이틀을 써야합니다. 이것은 code 내가 나라를 얻었던 방법. 내가 도시에서 사용한 유추 법. 이 줄을 실행하려고 시도하는 동안 var universityRepository = new RootObject((int)universityInResponse["id"], (string)universityInResponse["title"]); 처리되지 않은 예외가 있습니다. 클래스의 전체 코드는 :VK API에서 대학을 파싱하십시오.

당신의 문제는 JSON을 반환한다는 것입니다
namespace KoshelnykTestTask 
{ 
    //Here I have set properties for FetchAsync(string url) to get countries and cities 
    public class RootObject 
    { 
     public int Id { get; set; } 
     public string Title { get; set; } 
     public RootObject(int Id, string Title) 
     { 
      this.Id = Id; 
      this.Title = Title; 
     } 
    } 
} 

답변

3

는 다형성 배열을 포함 - 첫 번째 항목은 정수이며, :

public class GettingUniversity 
{ 
    public static List<RootObject> listOfUniversitiesRoot = new List<RootObject>();//This List contains Id and Titles of universities 
    public List<string> listOfUniversities = new List<string>();//list with names of the universities 
    private string jsonString; //string for getting data from the url 
    public async Task<List<RootObject>> FetchAsync(string url) 
    { 
     //getting data process goes here 
     using (var httpClient = new System.Net.Http.HttpClient()) 
     { 
      var stream = await httpClient.GetStreamAsync(url); 
      StreamReader reader = new StreamReader(stream); 
      jsonString = reader.ReadToEnd(); 
     } 

     var responseUniversities = JArray.Parse(JObject.Parse(jsonString)["response"].ToString());//parsing data from jsonstring 

     foreach (var universityInResponse in responseUniversities)//the foreach-loop 
     { 
      var universityRepository = new RootObject((int)universityInResponse["id"], (string)universityInResponse["title"]); 
      //listOfUniversitiesRoot.Add(universityRepository);//adding to the list with names of the universities 
      //listOfUniversities.Add(universityRepository.Title); 
     } 

     return listOfUniversitiesRoot;//returned list 
    } 

속성이 여기에 표시됩니다 당신은 다음과 같이 할 수있는 개체를 역 직렬화하기 전에 정수 값을 필터링해야

{ 
    "response":[ 
     201, 
     { 
     "id":1096, 
     "title":"КПИ им. И. Сикорского" 
     }, 
     { 
     "id":1135, 
     "title":"НУФВСУ (бывш. КГИФК)" 
     }, 
     { 
     "id":1140, 
     "title":"КГАВТ им. Конашевича-Сагайдачного" 
     }, 

: 나머지는 대학 정보를 포함하는 개체입니다

var universityRepository = JToken.Parse(jsonString)["response"] 
    // Filter the integer value by selecting only objects 
    .OfType<JObject>() 
    // Deserialize each object to a RootObject 
    .Select(o => o.ToObject<RootObject>()) 
    // Return in a List<RootObject> 
    .ToList(); 

var listOfUniversities = universityRepository 
    .Select(u => u.Title) 
    .ToList(); 

샘플 fiddle.

정적 또는 클래스 변수에 이러한 목록을 저장할 필요가없는 것 같습니다. 단순히 호출자에게 반환 할 수 있습니다.