SteamAPI JSON.net在VB.net中出错



当我试图对我得到的JSON内容进行反序列化时,我真的不明白我做错了什么。

您可以从http://api.steampowered.com/ISteamApps/GetAppList/v2?format=json

Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq
Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim SteamGameInfoObject As Object = JsonConvert.DeserializeObject(Of Object)(New System.Net.WebClient().DownloadString("http://api.steampowered.com/ISteamApps/GetAppList/v2?format=json"))

    End Sub
    Public Class SteamRootObject
        Public Class SteamAPIJSONResult
            Public Property applist As List(Of applistlist)
        End Class
        Public Class applistlist
            Public Property apps As List(Of appslist)
        End Class
        Public Class appslist
            Public Property appid As Integer()
            Public Property name As String()
        End Class
    End Class
End Class

我不知道如何"要修复此错误,请将JSON更改为JSON数组"

这里有一些问题:

  1. appidname分别定义为整数数组和字符串数组。在JSON中,这些是基元值,而不是数组,因此VB.NET属性本身应该声明为简单的整数和字符串。

  2. 您将applist定义为List(Of applistlist)。尽管有名称,JSON中的属性值是单个对象,而不是数组,因此该属性也应该引用单个对象。

  3. Form1_Load中,您需要反序列化为正确的类型SteamRootObject。如果执行JsonConvert.DeserializeObject(Of Object)(jsonString),则不会告诉Json.NET要反序列化的类型!

  4. 从风格上讲,不需要将内部类嵌套在根类中,这会增加复杂性。

有很多在线工具可以从JSON中自动生成.Net类,例如,可以使用谷歌快速找到这些工具http://json2csharp.com/(对于c#)或http://jsonutils.com/或http://www.httputility.net/json-to-csharp-vb-typescript-class.aspx.将来,使用其中一个来检查您的工作。

因此,你的固定类应该看起来像:

Public Class App
    Public Property appid As Integer
    Public Property name As String
End Class
Public Class Applist
    Public Property apps As New List(of App)
End Class
Public Class SteamRootObject
    Public Property applist As Applist
End Class

并且,要反序列化:

Dim SteamGameInfoObject = JsonConvert.DeserializeObject(of SteamRootObject)(jsonString)

小提琴原型。

相关内容

  • 没有找到相关文章

最新更新