2017-04-11 32 views
0

私はそうのように見えるのJSONリターンを持っている:VB.NET JSONアレイ - デシリアライズ

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

私は「coinName」のリストにそれを返すようにしようとしています。

私がやっている:

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 

そして、私は逆シリアル化するには、次のコードを使用しています:

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

「バルスは、」文字列の形式でJSONのリターンであることを。すべてのヘルプをいただければ幸いです

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. 

私は、次のエラーが発生します。

ありがとうございます。

+0

JSONが正しく構成されていないと思います。 JSON配列は次のようにする必要があります: '' cars ":[" Ford "、" BMW "、" Fiat "]'あなたは使用しないでください** {} ** – Mederic

+0

構造体に戻ると、 ** [] **基本的には、次のようにしなければなりません: '' coin3 ':[{"使用可能": "0.00000000"、 "onOrders": "0.00000000"、 "btcValue": "0.00000000"}] '修正されたJSONは動作しているかどうかを確認します。 – Mederic

+0

{"コイン1":[{"使用可能": "0.00000000"、 "onOrders": "0.00000000"、 "btcValue": "0.00000000"}]、 "コイン2":[{"使用可能": "0.00000000"、 "onOrders ":" 0.00000000 "、" btcValue ":" 0.00000000 "}]、" coin3 ":[{"使用可能 ":" 0.00000000 "、" onOrders ":" 0.00000000 "、" btcValue ":" 0.00000000 "}]} まだ動作しません –

答えて

0

あなたのルートJSONコンテナは配列ではありません。これは可変プロパティ名が"coinN"のさまざまな形式のオブジェクトです。Nです。 、ドキュメントについて

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

Serialization Guide : Dictionaries and HashtablesDeserialize a Dictionaryを参照してください:あなたは辞書の中に変数のプロパティ名と、そのようなオブジェクトをデシリアライズすることができます。

サンプルfiddle

0

彼がVB.NETでJSONについて多くの知識を持っていないと私は分かりませんが、私はコインの最初の出現を得ることができます。あなたのクラスを覚えておくべき事はJSONと同じ名前を持つ必要があります。

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

そして、私が使用した2つのクラスがある::

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 

マイJSON入力がある

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 

配列名はJSONと同じである必要があります。コイン

しかし、ラッパーは最初のコインオブジェクトを取得するだけかもしれません。多分、そのすべてを読む方法を試すことができます。

関連する問題