2017-12-06 8 views
0

coinmarketcap.comのAPIからjsonレスポンスを変換しようとするとエラーが発生します。
エラーがある:asp.netがタイプエラーのオブジェクトをキャストできません

"タイプのオブジェクトは 'System.Collections.Generic.List`1は[System.Objectの】' 'System.Dynamic.ExpandoObject' を型にキャストすることができません"

Webクライアントは他のAPIではうまく動作しますが、何らかの理由でコインオブジェクトが設定されていません。 vb.netまたはc#のいずれかの修正プログラムへの洞察は非常に高く評価されます。ソリューション作業

Dim dt_results As DataTable, dr As DataRow, url As String = String.Empty, json As Object = Nothing, iCount As Integer = 0 

    'temporarily store results 
    dt_results = New DataTable 
    dt_results.Columns.Add("name", GetType(String)) 
    dt_results.Columns.Add("symbol", GetType(String)) 
    dt_results.Columns.Add("price_usd", GetType(Double)) 

    Try 
     url = "https://api.coinmarketcap.com/v1/ticker/?convert=usd&limit=10" 
     Dim theurl As New Uri(url) 

     Using webClient = New System.Net.WebClient() 

      json = webClient.DownloadString(theurl) 

      'create json object 
      Dim converter = New ExpandoObjectConverter() 
      Dim coin As Object = JsonConvert.DeserializeObject(Of ExpandoObject)(json, converter) 

      For Each item In coin 

       Dim name As String = coin(iCount).name 
       Dim symbol As String = coin(iCount).symbol 
       Dim price_usd As Double = coin(iCount).price_usd 
       dr = dt_results.NewRow() 
       dr("name") = name 
       dr("symbol") = symbol 
       dr("price_usd") = price_usd 
       dt_results.Rows.Add(dr) 
       iCount = iCount + 1 
      Next 
     End Using 

    Catch ex As Exception 
     Dim ts As String = ex.Message 
     json = "1" 
    End Try 

...

 Dim d As JArray = JArray.Parse(json) 

      For i As Integer = 0 To d.Count 
       Dim name As String = d(i).Item("name") 
       Dim symbol As String = d(i).Item("symbol") 
       Dim price_usd As Double = CDbl(d(i).Item("price_usd")) 
       dr = dt_results.NewRow() 
       dr("name") = name 
       dr("symbol") = symbol 
       dr("price_usd") = price_usd 
       dt_results.Rows.Add(dr) 
       iCount = iCount + 1 
      Next 

答えて

1

は、非常に長い間VB.NETで書かれていないが、私はC#でのあなたのためのソリューションを持っています。オブジェクトモデルが明確に定義されていない場合は、Json.Netを使用して動的オブジェクトとして解析することをお勧めします。私たちはAPIから取得し、配列を取得しているので、Json.Netにそれを解析することを期待していることを伝える必要があります。以下は私のための実用的な解決策です(C#でも)

using (WebClient cli = new WebClient()) 
     { 
      string result = cli.DownloadString("https://api.coinmarketcap.com/v1/ticker/?convert=usd&limit=10"); 
      dynamic arrayFromApi = JArray.Parse(result); 

      // Use however - presumably loop through items 
      string s = arrayFromApi[0].name; 
     } 
+0

私は助けることができました! – mrkg

関連する問題