Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# asp.net无法强制转换错误类型的对象_C#_Asp.net_Json_Vb.net_Json.net - Fatal编程技术网

C# asp.net无法强制转换错误类型的对象

C# asp.net无法强制转换错误类型的对象,c#,asp.net,json,vb.net,json.net,C#,Asp.net,Json,Vb.net,Json.net,尝试从coinmarketcap.com的API转换json响应时出错。 错误是: “无法强制转换类型为的对象 要键入的'System.Collections.Generic.List'1[System.Object]' “System.Dynamic.ExpandooObject” web客户端对于其他API工作正常,但由于某些原因,coin对象未填充。如果您能深入了解vb.net或c#中的修复程序,将不胜感激 Dim dt_results As DataTable, dr As Da

尝试从coinmarketcap.com的API转换json响应时出错。
错误是:

“无法强制转换类型为的对象 要键入的'System.Collections.Generic.List'1[System.Object]' “System.Dynamic.ExpandooObject”

web客户端对于其他API工作正常,但由于某些原因,coin对象未填充。如果您能深入了解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

已经很长时间没有用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;
        }