我遇到了一个我不知道如何解决的问题。
我试图解决错误:
其他信息:无法反序列化当前的JSON数组 (例如[1,2,3])类型' name.jsonPrjData'因为类型需要 正确反序列化的JSON对象(例如{"名称":"值"})
我在堆栈溢出时发现了类似的页面,并尝试了答案中提出的内容,但我无法弄清楚问题是什么。
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq
Public Class jsonPrjData
Public Property sapcode() As String
Public Property prjCode() As String
Public Property prjDescript() As String
End Class
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim webClient As New System.Net.WebClient
Dim result As String = webClient.DownloadString("http://localhost/json/")
Dim obj = JsonConvert.DeserializeObject(Of jsonPrjData)(result)
End Sub
End Class
JSON看起来像这样:
[{" sapcode":" XXXX"" prjCode":" XXXX"" prjDescript&#34 ;: " XXXX"},{" sapcode":" XXXX"" prjCode":" XXXX"&#34 ; prjDescript":" XXXX"}]
答案 0 :(得分:2)
错误消息的关键部分是:Cannot deserialize the current JSON array (e.g. [1,2,3])
。消息滚动可以更清楚地了解该做什么:
要修复此错误,请将JSON更改为JSON对象(例如{“name”:“value”})或将反序列化类型更改为数组或实现集合接口的类型(例如ICollection, IList)像List可以从JSON数组反序列化。 JsonArrayAttribute也可以添加到类型中,以强制它从JSON数组反序列化。
方括号表示数据是一个数组(例如[1,2,3]),而且显然有2个重复的数据组具有相同结构。所以:
' Note the added ()
Dim prjData = JsonConvert.DeserializeObject(Of jsonPrjData())(result)
如错误消息的后半部分所示,您也可以反序列化为List(of T)
:
Dim prjList = JsonConvert.DeserializeObject(Of List(Of jsonPrjData))(result)
当然,由于目标对象是在本地声明的,因此它们只存在于该click事件中。