VB.NET 从 JSON 填充 DataGridView

VB.NET Fill DataGridView from JSON

我正在努力从 JSON 中填充 DataGridView,我通过对 SOLR 的 Web 请求获得该数据。

JSON 示例:

    {
  "response":{"numFound":6,"start":1,"docs":[
      {
        "PRODUCTNAME":"Office Chair",
        "CURRENCYCODE":"EUR",
        "CLIENTCODE":"Northwind Inc",
        "LANGUAGECODE":"ENG",
        "KEYWORDS":"spins, adjust, castors"}]
  }}

以下将起作用并获得一个令牌并将其放入标签中。

代码:

    Private Sub SOLR()

        Label2.Text = Nothing
        Try
            Dim fr As WebRequest
            Dim targetURI As New Uri("LinkToJson")

            fr = DirectCast(WebRequest.Create(targetURI), WebRequest)
            fr.Credentials = New NetworkCredential("admin", "admin")
            If (fr.GetResponse().ContentLength > 2) Then

                Dim str As New StreamReader(fr.GetResponse().GetResponseStream())
                Dim streamText As String = str.ReadToEnd()

                Dim myJObject = JObject.Parse(streamText)
                Label2.Text = myJObject.SelectToken("response.docs[0].KEYWORDS")
                Label3.Text = streamText

            End If

        Catch ex As WebException
            MessageBox.Show(ex.ToString())
        End Try
    End Sub

我试图反序列化它,但出现以下错误:

Dim table As DataTable = JsonConvert.DeserializeObject(Of DataTable)(streamText)
DataGridView1.DataSource = myJObject

Newtonsoft.Json.JsonSerializationException: 'Unexpected JSON token when reading DataTable. Expected StartArray, got StartObject. Path '', line 1, position 1.'

您需要将“docs”数组传递给 DeserializeObject 函数,以便将 JSON 数据加载到 DataTable

Dim myJObject = JObject.Parse(streamText)
Dim arr = myJObject("response")("docs")
Dim table = JsonConvert.DeserializeObject(Of DataTable)(arr.ToString())