我正在使用此代码来解析我的JSON字符串,并引发异常,错误是:
Myapp.exe中发生了类型为'System.InvalidCastException'的未处理异常。其他信息:无法将类型为'Newtonsoft.Json.Linq.JProperty'的对象转换为类型为'Newtonsoft.Json.Linq.JObject'的对象。
我已经正确导入了Json.Net,并且这个完全相同的代码可在不同的子项中运行并进行解析。
这是我的代码:
Dim o As JObject = JObject.Parse(responseContent)
Dim results As List(Of JToken) = o.Children().ToList
For Each item As JProperty In results
item.CreateReader()
Select Case item.Name
Case "response"
Dim BatteryCharge As String
For Each subitem As JObject In item.Values
BatteryCharge = subitem("battery_level")
MessageBox.Show(BatteryCharge)
Next
End Select
Next
JSON字符串看起来像这样,现在我只需要获取即可,battery_level
但是如果您能告诉我如何添加更多(如果需要)的话,那会很棒。
{ "response": { "charging_state": "Complete", // "Charging", ?? "charge_to_max_range": false, // current std/max-range setting "max_range_charge_counter": 0, "fast_charger_present": false, // connected to Supercharger? "battery_range": 239.02, // rated miles "est_battery_range": 155.79, // range estimated from recent driving "ideal_battery_range": 275.09, // ideal miles "battery_level": 91, // integer charge percentage "battery_current": -0.6, // current flowing into battery "charge_starting_range": null, "charge_starting_soc": null, "charger_voltage": 0, // only has value while charging "charger_pilot_current": 40, // max current allowed by charger & adapter "charger_actual_current": 0, // current actually being drawn "charger_power": 0, // kW (rounded down) of charger "time_to_full_charge": null, // valid only while charging "charge_rate": -1.0, // float mi/hr charging or -1 if not charging "charge_port_door_open": true } }
最简单的方法是避免使用JObject.Parse
方法,而是将其反序列化为POCO,如下所示:
Sub Main
Dim response = JsonConvert.DeserializeObject(Of ResponseObject)("*your JSON string goes here*")
Console.WriteLine("The battery level is " & response.response.battery_level)
End Sub
Public Class Response
Public Property charging_state As String
Public Property charge_to_max_range As Boolean
Public Property max_range_charge_counter As Integer
Public Property fast_charger_present As Boolean
Public Property battery_range As Double
Public Property est_battery_range As Double
Public Property ideal_battery_range As Double
Public Property battery_level As Integer
Public Property battery_current As Double
Public Property charge_starting_range As Object
Public Property charge_starting_soc As Object
Public Property charger_voltage As Integer
Public Property charger_pilot_current As Integer
Public Property charger_actual_current As Integer
Public Property charger_power As Integer
Public Property time_to_full_charge As Object
Public Property charge_rate As Double
Public Property charge_port_door_open As Boolean
End Class
Public Class ResponseObject
Public Property response As Response
End Class
这也意味着您除了以后可以访问和使用其他属性battery_level
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句