Arrays VB.NET JSON数组的JSON数组-反序列化
我有一个json返回,看起来是这样的:Arrays VB.NET JSON数组的JSON数组-反序列化,arrays,json,vb.net,Arrays,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","
{"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)
“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.
Newtonsoft.Json.Json.JsonSerializationException类型的未处理异常发生在Newtonsoft.Json.dll中
其他信息:无法将当前JSON对象(例如{“名称”:“值”})反序列化为类型“System.Collections.Generic.List`1[WindowsApplication21.coinName]”,因为该类型需要JSON数组(例如[1,2,3])才能正确反序列化。
若要修复此错误,请将JSON更改为JSON数组(例如[1,2,3]),或更改反序列化类型,使其成为可以从JSON对象反序列化的正常.NET类型(例如,不是integer之类的基元类型,也不是数组或列表之类的集合类型)。还可以将JsonObjectAttribute添加到类型中,以强制它从JSON对象反序列化。
路径“1CR”,第1行,位置7。
任何帮助都将不胜感激
谢谢。我不知道他是否能帮到你,我对VB.NET中的JSON没有太多的知识,但我设法得到了第一个硬币。要记住的是,类的名称必须与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
我的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"}]
}
我使用的两个类是:
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中的名称相同,因此:coin
但是,包装器只获取第一个coin对象,也许您可以尝试了解如何读取所有对象。您的根JSON容器不是一个数组-它是一个具有各种
N
格式的变量属性名的对象。可以将具有可变属性名称的此类对象反序列化到字典中:
Dim pData = JsonConvert.DeserializeObject(Of Dictionary(Of String, cValues))(bals)
有关文档,请参阅和
示例。我认为您的JSON结构不正确。JSON数组应该如下:
“cars”:[“Ford”、“BMW”、“Fiat”]
你不应该使用{}所以回到结构上来,我认为你仍然缺少[]基本上你应该有的:“coin3”:[{“available”:“0.00000000”,“onOrders”:“0.00000000”,“btcValue”:“0.00000000”}]
试着用正确的JSON运行代码,看看它是否有效。{“coin1”:[{“可用”:“0.00000000”,“onOrders”:“0.00000000”,“btcValue”:“0.00000000”}],“coin2”:[{“可用”:“0.00000000”,“onOrders”:“0.00000000”,“btcValue”:“0.00000000”}],“coin3”:[{“可用”:“0.00000000”,“onOrders”:“0.00000000”,“btcValue”:“0.00000000”}仍然不起作用