2017-01-15 164 views
1

我已閱讀其他答案,但我似乎仍然迷失。我正在嘗試將JSON引入我的對象中。我通過API調用一個JSON字符串,並且我想在RequestManager之後將它轉換爲對象。我是否缺少方法或什麼?而且,returnChampions2函數是錯誤的。我在方法之後發佈了一部分JSON字符串,它非常長。JSON反序列化到VB.Net對象

公共類RequestManager

Public Function returnChampions2(ByVal strRegion As String) As LeagueChampionMaster 
    Dim strRequest As String = "https://global.api.pvp.net/api/lol/static-data/" + strRegion + "/v1.2/champion?api_key=" + _APIKey 
    Return JsonConvert.DeserializeObject(Of LeagueChampionMaster)(returnJSONRequest(strRequest)) 
End Function 

Public Class LeagueChampionMaster 
    Private _Type As String 
    Private _Version As String 
    Private _Data As LeagueChampion() 
End Class 

Public Class LeagueChampion 
    Private _ID As Integer 
    Private _Key As String 
    Private _Name As String 
    Private _Title As String 
End Class 

的JSON:

{ 「類型」: 「冠軍」, 「版本」: 「6.24.1」, 「數據」:{ 「賈克斯」 :{「id」:24,「key」:「Jax」,「name」:「Jax」,「title」:「Grandmaster at Arms」},「Sona」:{「id」 :「Sona」,「name」:「Sona」,「title」:「Maven of the Strings」},「Tristana」:{「id」:18,「key」:「Tristana」,「name」 「Tristana」,「title」:「 Yordle Gunner」},「Varus」:{「i d「:110,」key「:」Varus「,」name「:」Varus「,」title「:」 懲罰的箭頭「},」Fiora「:{」id「:114,」key「 「Fiora」,「name」:「Fiora」,「title」:「 Grand Duelist」},「Singed」:{「id」:27,「key」:「Singed」,「name」:「 「,」標題「:」 Mad Chemist「,」TahmKench「:{」id「:223,」key「:」TahmKench「,」name「:」Tahm Kench「,」title「:」the River 「Leblanc」:{「id」:7,「key」:「Leblanc」,「name」:「LeBlanc」,「title」:「 Deceiver」},「Thresh」:{「id 「:412,」鑰匙「:」門檻「,」名稱「:」門檻「,」標題「:」 鏈 守望者「},」噶瑪「:{」id「:43,」key「:」Karma 「,」name「:」Karma「,」title「:」 Enlightened One「},」Jhin「:{」id「:202,」key「:」Jhin「,」name「:」Jhin「, 「標題」:「 Virtuoso「}」Rumble「:{」id「:68,」key「:」Rumble「,」name「:」Rumble「,」title「:」 機械化的 威脅「},」Udyr「 「id」:77,「key」:「Udyr」,「name」:「Udyr」,「title」:「 Spirit Walker」},「LeeSin」:{「id」:64,「key」 LeeSin「,」name「:」Lee Sin「,」title「:」Blind Monk「},」Yorick「:{」id「:83,」key「:」Yorick「,」name「:」Yorick 「,」title「:」Shepherd of Souls「},」Kassadin「:{」id「:38,」key「:」Kassadin「,」name「:」Kassadin「,」title「:」 Void 「Sivir」:{「id」:15,「key」:「Sivir」,「name」:「Sivir」,「title」:「 Battle 女主人」},「MissFortune」:{ 「id」:21,「key」:「MissFortune」,「name」:「小姐 財富」,「標題」:「賞金 獵人」} ,「Draven」:{「id」:119,「key」:「Draven」,「name」:「Draven」,「title」:「 Glorious Executioner」},「Yasuo」:{「id」 157,「key」:「Yasuo」,「name」:「Yasuo」,「title」:「 Unforgiven」},「Kayle」:{「id」:10,「key」:「Kayle」 「:」Kayle「,」title「:」The Judicator「},」Shaco「:{」id「:35,」key「:」Shaco「,」name「:」Shaco「,」title「:」 Demon Jester「}」Renekton「:{」id「:58,」key「:」Renekton「,」name「:」Renekton「,」title「:」 屠夫「}, Hecarim「:{」id「:120,」key「:」Hecarim「,」name「:」Hecarim「,」title「:」 Shadow of War「},」Fizz「:{」id「:105 ,「key」:「Fizz」,「name」:「Fizz」,「title」:「潮汐 Trickster」}}}

+0

第一「的靈魂牧羊人」,更改屬性公共否則您將無法訪問數據。然後屬性名稱需要匹配json:'_id'不會匹配'id' - 去掉下劃線。此外,數據應該是一個字典,所以你不必爲Fizz定義一個與「ziggy」相同的類 – Plutonix

回答

2

您有幾個問題。你應該知道,如果你的JSON複製到剪貼板,編輯 - >選擇性粘貼 - >粘貼JSON作爲類 Visual Studio將創建類你給你一個體面的起點。在這個的情況下,該工具有點密集並且會爲「Fizz」,「Shaco」等創建許多相同的類。您已經規範了這一點。

但是,所有屬性Private您都無法訪問數據。然後,屬性名稱是錯誤的。 idkey的json密鑰將不會映射/反序列化爲_id_key,因爲它們不匹配。最後,數據收集應該是Dictionary。爲每個玩家/冠軍/項的密鑰將被用作Dictionary鍵:

Public Class LeagueContainer 
    Public Property type As String 
    Public Property version As String 
    Public Property data As Dictionary(Of String, DataItem) 
End Class 

Public Class DataItem 
    Public Property id As Integer 
    Public Property key As String 
    Public Property name As String 
    Public Property title As String 
End Class 

用法:

Dim jstr = ... from where ever ... 
Dim myData = JsonConvert.DeserializeObject(Of LeagueContainer)(jstr) 

' print the keys 
For Each kvp In myData.data 
    Console.WriteLine(kvp.Key) 
Next 

' what is Yorick's title? 
Console.WriteLine("Yorick is '{0}'", myData.data("Yorick").title) 

(部分)輸出:

賈克斯
索娜
Tristana
Varus
Fiora
...
約裏克是

+0

你用'Edit - > Paste Special - >將Json粘貼爲Classes'指的是什麼工具? – MrGadget

+0

Visual Studio - 我*認爲*從VS2010 @MrGadget我將編輯,使更清晰,它不說*什麼*將創建它們 – Plutonix

+0

我發現它...有[特殊步驟](http:// www.c-sharpcorner.com/UploadFile/pranayamr/generate-class-from-json-xml-in-visual-studio/)(謝謝Google)。 – MrGadget