2017-04-11 19 views
0

Ich habe eine json Rückkehr, die wie so aussieht:VB.NET JSON Array von 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"} 
} 

ich es in eine Liste von "coinName" zurückzukehren versuchen.

ich tue:

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 

Und ich bin mit dem folgenden Code deserialisieren:

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

"bals" ist die json Rückkehr in Form einer Zeichenfolge.

Ich erhalte den folgenden Fehler:

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. 

Jede Hilfe wäre sehr geschätzt.

Vielen Dank.

+0

Ich denke, dass Ihr JSON nicht richtig strukturiert ist. JSON-Arrays sollten wie folgt sein: '" Autos ": [" Ford "," BMW "," Fiat "]' sollten Sie nicht verwenden ** {} ** – Mederic

+0

Also kommen Sie zurück zu der Struktur, die ich denke, dass Sie immer noch vermisst die ** [] ** im Grunde sollten Sie: '" coin3 ": [{" verfügbar ":" 0.00000000 "," onOrders ":" 0.00000000 "," btcValue ":" 0.00000000 "}]' Versuchen Sie, Ihren Code mit das korrigierte JSON, ob es funktioniert. – Mederic

+0

{"coin1": [{"verfügbar": "0.00000000", "onOrders": "0.00000000", "btcValue": "0.00000000"}], "coin2": [{"verfügbar": "0.00000000", "onOrders ":" 0.00000000 "," btcValue ":" 0.00000000 "}]," coin3 ": [{" verfügbar ":" 0.00000000 "," onOrders ":" 0.00000000 "," btcValue ":" 0.00000000 "}]} funktioniert immer noch nicht –

Antwort

0

Ihr Root-JSON-Container ist kein Array - es ist ein Objekt mit Variableneigenschaftsnamen im Format "coinN" für verschiedene N. Sie können ein solches Objekt mit variablen Eigenschaftsnamen in einem Wörterbuch deserialisieren:

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

Zur Dokumentation finden Sie Serialization Guide : Dictionaries and Hashtables und Deserialize a Dictionary.

Beispiel fiddle.

0

Ich weiß nicht, ob sein Wille Ihnen helfen kann Ich habe nicht viel Wissen in JSON mit VB.NET, aber ich schaffe es, das erste Vorkommen von Münzen zu bekommen. Die Sache, die Klassen zu erinnern, müssen den gleichen Namen wie in JSON haben:

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 

Meine JSON Eingang ist:

{"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"}] 
} 

Und die beiden Klassen I verwendet werden, sind:

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 

Der Name des Arrays muss mit dem in JSON übereinstimmen: Münze

Allerdings bekommt der Wrapper nur die erste Münze Objekt vielleicht können Sie versuchen, Abbildung, wie Sie alles lesen.