简体   繁体   中英

VB.NET Fill DataGridView from JSON

I am struggling to fill a DataGridView from a JSON that I get through a webrequest to SOLR.

JSON Example:

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

The below will work and get one token and put it in a label.

Code:

    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

I tried to deserialize it, but I get an error for the below:

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.'

You need to pass the " docs " array to the DeserializeObject function in order to load the JSON data into DataTable .

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM