Deserializar Array Json con vb.net

por | octubre 28, 2019

Primeramente definimos el tipo JSON a descargar

Public Class Nodo
    Public id As Long
    Public Titulo As String
End Class

A continuación leemos de una URL el webservice JSON y o recorremos para cada item del contenido


Dim request As HttpWebRequest
Dim response As HttpWebResponse = Nothing
Dim reader As StreamReader
request = DirectCast(WebRequest.Create(URL), HttpWebRequest)

response = DirectCast(request.GetResponse(), HttpWebResponse)
reader = New StreamReader(response.GetResponseStream())
Devuelve = reader.ReadToEnd()

Dim nodos() As Nodo = JsonConvert.DeserializeObject(Of Nodo())(Devuelve)

Dim count As Long = nodos.Length
For i = 0 To count - 1
     Devuelve = nodos(i).Titulo
Next

reader.Close()
Print Friendly, PDF & Email

4 pensamientos en “Deserializar Array Json con vb.net

  1. AvatarJesus

    Ayuda por favor, segui tu ejemplo pero me manda un error estoy trabajando en VB ASP net 2015.

    pero marca el error al declarar

    Dim dt() As Recargas = JsonConvert.DeserializeObject(Of Recargas())(raw)

    Cree una clase llamada

    Public Class Recargas
    Public ID As String
    Public Bolsa As String
    Public Saldo As String
    End Class

    el error es,

    Cannot deserialize the current JSON object (e.g. {“name”:”value”}) into type ‘Recargas[]’ because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.
    To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
    Path ‘success’, line 1, position 11.

  2. Angel AlcaideAngel Alcaide Autor

    Hola Jesús.
    Lo que miraría es qué te devuelve el servicio web, osea el resultado del json que estás leyendo debería ser:
    [
    {
    “ID”: “1”,
    “Bolsa”:”bolsa1″,
    “Saldo”:122.3959,
    },
    {
    “ID”: “2”,
    “Bolsa”:”bolsa2″,
    “Saldo”:122.3959,
    }
    ]

    En caso de que exista otra anidación o un vector de cabecera:
    la clase se compondría tal cual el resultado del JSON
    [
    “Recargas”: {
    {
    “ID”: “1”,
    “Bolsa”:”bolsa1″,
    “Saldo”:122.3959,
    },
    {
    “ID”: “2”,
    “Bolsa”:”bolsa2″,
    “Saldo”:122.3959,
    }
    }
    ]

  3. Avatarjesus

    Buen dia, Angel primero que nada gracias por contestar la duda, el json lo regresa correcto, lo he revisado en postman y en mi resultado de en VB asp net, si me lo regresa correcto. El problema es al deserializarlo me marca eso ,he investigado y segun que lo debo de tratar como array,

    {
    “success”: true,
    “error”: 0,
    “message”: “Consulta Exitosa”,
    “data”: [
    {
    “ID”: “1”,
    “Bolsa”: “Tiempo Aire”,
    “Saldo”: “96.16”
    },
    {
    “ID”: “2”,
    “Bolsa”: “Pago de Servicios”,
    “Saldo”: “52.85”
    },
    {
    “ID”: “3”,
    “Bolsa”: “Timbres CFDI”,
    “Saldo”: “1,010.00”
    }
    ],
    “extra”: null
    }

    Asi esta parte de mi codigo como lo pones en tu ejemplo.

    ‘ Get the response stream into a reader
    reader = New StreamReader(response.GetResponseStream())

    Dim Devuelve As String = reader.ReadToEnd()

    TextBox2.Text = Devuelve ‘aqui lo pongo para visualizarlo y sale correcto el json tal cual como el postman

    ‘ Solo que si dejo estas lineas inmediatamente me marca el error
    Dim nodos() As Nodo = JsonConvert.DeserializeObject(Of Nodo())(Devuelve)

    Dim count As Long = nodos.Length
    For i = 0 To count – 1
    Devuelve = nodos(i).ID
    Next

    reader.Close()

    Sigo intentado resolverlo. agradezo tu apoyo.

  4. Avatarjesus

    buen dia, ya quedo Angel gracias por tu apoyo. Tenia mal declarada mi Clase ,debia ser como lista.

    Saludos

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *