VB .net中的SteamAPI JSON.net错误

时间:2015-12-27 13:51:15

标签: arrays json vb.net variables json.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 个答案:

答案 0 :(得分:1)

这里有一些问题:

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

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

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

  4. 在风格上,没有必要将内部类嵌套在根类中,这增加了复杂性。

  5. 有很多在线工具可以自动生成JSON中的.Net类,可以使用google快速找到,例如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)
    

    原型fiddle