2015-12-27 68 views
-1

我真的不明白我做錯了,當我嘗試反序列化我得到的JSON的東西。SteamAPI JSON.net錯誤在VB .net

你可以從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數組」

+0

你沒有告訴我們錯誤信息的第一部分,我們不能告訴你如何解決這個問題,而不會看到你使用的代碼。這聽起來像你不是反序列化到一個數組類型 – Plutonix

+0

我要編輯它的完整源代碼。 – McLucario

+0

@Plutonix好了。 – McLucario

回答

1

你有幾個問題,這裏的響應:

  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類,可以快速使用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

+0

感謝您的幫助。 – McLucario