JSON.Net无法反序列化当前的JSON数组

时间:2016-11-25 16:42:23

标签: vb.net json.net

我试图为LoL制作一个允许用户查看播放器特定统计数据的程序。但是,我有问题..

我得到的错误是。

  

其他信息:无法反序列化当前的JSON数组   (例如[1,2,3])到类型' WindowsApplication1.Form1 + Rootobject'   因为类型需要一个JSON对象(例如{" name":" value"})来   正确地反序列化。

这是我到目前为止的代码。

Public Class Rootobject
        Public Property games As Integer
        Public Property winPercent As Double
        Public Property order As List(Of Class1)
        Public Property role As String
    End Class

    Public Class Class1
        Public Property order() As String
    End Class

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim client As WebClient = New WebClient()
        client.Headers.Add("Content-Type", "application/json")
        Dim reply As String = client.DownloadString("skills/mostPopular?api_key=")
        Dim rootObject As Rootobject = JsonConvert.DeserializeObject(Of Rootobject)(reply)
        MsgBox(rootObject.games)
    End Sub 

以下是JSON的外观。 (Id发布网址但需要API密钥)

[
  {
    "games": 1650,
    "winPercent": 46.9,
    "order": [
      "Q",
      "W",
      "E",
      "Q",
      "Q",
      "R",
      "Q",
      "W",
      "Q",
      "W",
      "R",
      "W",
      "W",
      "E",
      "E",
      "R",
      "E",
      "E"
    ],
    "role": "Support"
  },
  {
    "games": 9769,
    "winPercent": 51.8,
    "order": [
      "Q",
      "W",
      "E",
      "Q",
      "Q",
      "R",
      "Q",
      "W",
      "Q",
      "W",
      "R",
      "W",
      "W",
      "E",
      "E",
      "R",
      "E",
      "E"
    ],
    "role": "Middle"
  }
] 

2 个答案:

答案 0 :(得分:2)

您的Json字符串是RootObjects的数组。 将预期对象更改为列表

Dim objects As List(Of Rootobject) = JsonConvert.DeserializeObject(Of List(Of Rootobject))(reply)

Dim root As Rootobject = objects.First()
MessageBox.Show(root.games)

@Nkosi注意到第二个错误 - 按照他的建议更改Rootobject

答案 1 :(得分:2)

更新根对象。有问题的JSON解析为以下类

Public Class Rootobject
    Public Property games As Integer
    Public Property winPercent As Double
    Public Property order As String()
    Public Property role As String
End Class

当数据是集合时,您还尝试将数组反序列化为单个对象。

Dim rootObjects As List(Of Rootobject) = JsonConvert.DeserializeObject(Of List(Of Rootobject))(reply)