2017-03-21 10 views
1

大学のリストList<string>に書き込む必要があります。私はすでに国や都市をリストに書いていました。しかし、大学では、データは少し異なります。 {"response":[201,があり、私はそれをどう扱うか考えていません。私は成功した国はhereです。 hereから大学のタイトルをList<string>に書き込む必要があります。これはcodeどのように私は国を得たかです。私が都市で使った類推コード。この行を実行しようとしているうちにvar universityRepository = new RootObject((int)universityInResponse["id"], (string)universityInResponse["title"]);私は処理されない例外があります。クラスの完全なコード:VK APIの大学を構文解析してください

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 
    } 

プロパティがここに表現されています

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

あなたの問題は、JSONが多型である配列を含んで返されたということです - 最初のエントリは整数であり、あなたは次のように行うことができるオブジェクトをデシリアライズする前に、整数値をフィルタリングする必要

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

静的変数またはクラス変数にこれらのリストを格納する必要はないようですが、単に呼び出し元に返すことができます。

関連する問題