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()
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.
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,
}
}
]
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.
buen dia, ya quedo Angel gracias por tu apoyo. Tenia mal declarada mi Clase ,debia ser como lista.
Saludos
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.
Buen dia Jesus , como resolviste tu problema , ya que me manda el mismo error que comentas, como es que dices que declaraste como Lista??
Gracias de antemano