JSON JsonConvert.DeserializeObject错误

时间:2016-05-26 19:50:22

标签: .net vb.net json.net

我遇到了一个我不知道如何解决的问题。

我试图解决错误:

  

其他信息:无法反序列化当前的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"}]

1 个答案:

答案 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事件中。