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
6 comentarios en «Deserializar Array Json con vb.net»
  1. 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. 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. 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. buen dia, ya quedo Angel gracias por tu apoyo. Tenia mal declarada mi Clase ,debia ser como lista.

    Saludos

  5. Hola,

    he encontrado este post despues de mucho buscar y me ha resuelto el problema, pero solo con un ejemplo, pero no con el que quiero deserializar . Mi JSON es como este:

    {
    “@odata.context”: “https://xxxxxxxxxxxxxxxxxxxxxxxxxxxx”,
    “value”: [
    {
    “no”: “C01533”,
    “name”: “client.”,
    “salesPersonCode”: “ES”,
    “contact”: “contacto”,
    “email”: “email@email.com”,
    “approvalDate”: “0”,
    “sales”: 0
    },
    {
    “no”: “C01535”,
    “name”: “client”,
    “salesPersonCode”: “AM”,
    “contact”: “contacto”,
    “email”: “email@email.com”,
    “approvalDate”: “0”,
    “sales”: 0
    }
    ]
    }

    El caso es que al tener “@odata.context” no puedo declarar la variable, ya que el VB me da error. Como puedo declarar esa variable? Como quedaria la clase? Y a la hora de deserializar, como lo ejecutaria? Llevo dias para intentar resolverlo pero la dichosa variable me tiene loco.

    Espero me puedan ayudar.

    Gracias

  6. Solo se me ocurre que con ayuda de la funcion String.Split limpies la cadena resultado, saltando hasta el corchete y dejando solo el contenido entre estos corchetes, borra la última llave. La cadena resultado trátala con la clase adecuada finalmente.

Deja una respuesta

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