VB. NET Заполнить DataGridView из JSON - PullRequest
0 голосов
/ 25 мая 2020

Я изо всех сил пытаюсь заполнить DataGridView из JSON, который я получаю через веб-запрос к SOLR.

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: 'Неожиданный токен JSON при чтении DataTable. Ожидается StartArray, есть StartObject. Путь '', строка 1, позиция 1. '

1 Ответ

1 голос
/ 25 мая 2020

Вам необходимо передать массив « docs » в функцию DeserializeObject, чтобы загрузить данные JSON в DataTable.

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