2017-04-11 2 views
0

J'ai un retour JSON qui ressemble à ceci:VB.NET JSON Tableau de JSON Array - Deserialize

{"coin1":{"available":"0.00000000","onOrders":"0.00000000","btcValue":"0.00000000"}, 
"coin2":{"available":"0.00000000","onOrders":"0.00000000","btcValue":"0.00000000"}, 
"coin3":{"available":"0.00000000","onOrders":"0.00000000","btcValue":"0.00000000"} 
} 

Je suis en train de le retourner dans une liste de "coinName".

que je fais:

Public Class coinName 
    Public Vals As cValues 
End Class 

Public Class cValues 
    Public available As String 
    Public onOrders As String 
    Public btcValue As String 
End Class 

Je suis en utilisant le code suivant désérialiser:

Dim pData = JsonConvert.DeserializeObject(Of List(Of coinName))(bals) 

"Bals" étant le retour JSON sous la forme d'une chaîne.

Je reçois l'erreur suivante:

An unhandled exception of type 'Newtonsoft.Json.JsonSerializationException' occurred in Newtonsoft.Json.dll 

Additional information: Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List`1[WindowsApplication21.coinName]' 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<T>) 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 '1CR', line 1, position 7. 

Toute aide serait grandement appréciée.

Merci.

+0

Je pense que votre JSON n'est pas structuré correctement. Les tableaux JSON devraient être les suivants: '' cars'': ["Ford", "BMW", "Fiat"] 'vous ne devriez pas utiliser ** {0} ** – Mederic

+0

Pour revenir à la structure, je pense que vous êtes toujours absent le ** [] ** vous devriez avoir fondamentalement: '" coin3 ": [{" disponible ":" 0.00000000 "," onOrders ":" 0.00000000 "," btcValue ":" 0.00000000 "}]' Essayez d'exécuter votre code avec le JSON corrigé voir si cela fonctionne. – Mederic

+0

{"coin1": [{"disponible": "0.00000000", "onOrders": "0.00000000", "btcValue": "0.00000000"}], "pièce2": [{"available": "0.00000000", "onOrders ":" 0.00000000 "," btcValue ":" 0.00000000 "}]," coin3 ": [{" disponible ":" 0.00000000 "," onOrders ":" 0.00000000 "," btcValue ":" 0.00000000 "}]} ne fonctionne toujours pas –

Répondre

0

Votre conteneur JSON racine n'est pas un tableau. Il s'agit d'un objet avec des noms de propriétés variables au format "coinN" pour divers N. Vous pouvez désérialiser un tel objet avec les noms de propriétés variables dans un dictionnaire:

Dim pData = JsonConvert.DeserializeObject(Of Dictionary(Of String, cValues))(bals) 

Pour la documentation, voir Serialization Guide : Dictionaries and Hashtables et Deserialize a Dictionary.

Échantillon fiddle.

0

Je ne sais pas si sa volonté vous aidera Je n'ai pas beaucoup de connaissances en JSON avec VB.NET mais je parviens à obtenir la première occurrence de pièce de monnaie. La chose à retenir vos classes doivent avoir le même nom que dans JSON:

Dim final As String = "" 
Dim json As String = TextBox1.Text 
Dim coincollection = JsonConvert.DeserializeObject(Of coinCollection)(json) ' Deserialize array of Post objects 
Dim coins = coincollection.coin 
If coins.Length = 1 Then ' or whatever condition you prefer 
    final = coins(0).available 
End If 

Mon entrée JSON est:

{"coin":[{"available":"0.00000000","onOrders":"0.00000000","btcValue":"0.00000000"}], 
"coin":[{"available":"0.00000000","onOrders":"0.00000000","btcValue":"0.00000000"}], 
"coin":[{"available":"0.00000000","onOrders":"0.00000000","btcValue":"0.00000000"}] 
} 

Et les deux classes I utilisées sont:

Public Class coinCollection 
    Public coin() As coinName 
End Class 
Public Class coinName 
    Public available As String 
    Public onOrders As String 
    Public btcValue As String 
End Class 

Le nom du tableau doit être le même que dans le JSON d'où: pièce

Cependant, le wrapper obtient seulement le premier objet pièce peut-être vous pouvez essayer de comprendre comment lire tout cela.