我已经阅读了其他答案,但我似乎仍然迷失了。我试图将JSON带入我的对象。我通过API调用JSON字符串,我想在RequestManager之后将其转换为对象。我错过了什么方法吗?此外,returnChampions2函数是错误的。我在方法之后发布了部分JSON字符串,它真的很长。
公共类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, “关键”: “贾克斯”, “姓名”: “贾克斯”,“称号”:“大宗师 at Arms“},”Sona“:{”id“:37,”key“:”Sona“,”name“:”Sona“,”title“:”Maven of 该 琴弦 “},” TRISTANA “:{” ID “:18,” 钥匙 “:” TRISTANA “ ”名“: ”TRISTANA“, ”称号“:” 在 Yordle 炮手 “},” 内翻 “:{” ID “:110,” 钥匙 “:” 内翻 “ ”名“: ”内翻“, ”称号“:” 在 箭头 惩戒 “},” Fiora的 “:{” ID “:114,” 钥匙 “:” Fiora的 “ ”名“: ”Fiora的“, ”称号“:” 在 盛大 决斗者 “},” 烧焦 “:{” ID “:27,” 钥匙 “:” 烧焦 “ ”名“: ”烧焦“, ”称号“:” 在 疯狂化学家“},”TahmKench“:{”id“:223,”key“:”TahmKench“,”name“:”Tahm Kench“,”标题“:”河 王 “},” 勒布朗 “:{” ID “:7,” 关键 “:” 勒布朗 “ ”名“: ”勒布朗“, ”称号“:” 在 骗子 “},” THRESH “:{” ID “:412,” 钥匙 “:” 脱粒 “ ”名“: ”脱粒“, ”称号“:” 在 链 监狱长 “},” 因果报应 “:{” ID “:43,” 钥匙 “:” 因果报应 “ ”名“: ”因果报应“, ”称号“:” 在 开明 一个 “},” Jhin “:{” ID “:202,” 钥匙 “:” Jhin “ ”名“: ”Jhin“, ”称号“:” 在 炫技 “},” 轰隆隆 “:{” ID “:68,” 钥匙 “:” 轰隆隆 “ ”名“: ”轰隆隆“, ”称号“:” 在 机械化 威胁 “},” Udyr “:{” ID “:77,” 钥匙 “:” Udyr “ ”名“: ”Udyr“, ”称号“:” 在 Spirit Walker“},”LeeSin“:{”id“:64,”key“:”LeeSin“,”name“:”Lee 罪“,”标题“:”盲人 僧 “},” 约里克 “:{” ID “:83,” 钥匙 “:” 约里克 “ ”名“: ”约里克“, ”称号“:” 牧羊人 的 灵魂 “},” Kassadin “:{” ID “:38,” 钥匙 “:” Kassadin “ ”名“: ”Kassadin“, ”称号“:” 在 空虚 沃克 “},” Sivir “:{” ID “:15,” 钥匙 “:” Sivir “ ”名“: ”Sivir“, ”称号“:” 在 战斗 女主人 “},” MissFortune “:{” ID “:21,” 钥匙 “:” MissFortune “ ”名“:” 小姐 财富“,”标题“:”赏金 猎人 “},” Draven “:{” ID “:119,” 钥匙 “:” Draven “ ”名“: ”Draven“, ”称号“:” 在 辉煌 刽子手 “},” 康夫 “:{” ID “:157,” 钥匙 “:” 康夫 “ ”名“: ”康夫“, ”称号“:” 在 不可饶恕 “},” 凯尔 “:{” ID “:10,” 钥匙 “:” 凯尔 “ ”名“: ”凯尔“, ”称号“:” 其 执法官 “},” Shaco “:{” ID “:35,” 钥匙 “:” Shaco “ ”名“: ”Shaco“, ”称号“:” 在 恶魔 小丑 “},” Renekton “:{” ID “:58,” 钥匙 “:” Renekton “ ”名“: ”Renekton“, ”称号“:” 在 屠夫的 金沙 “},” Hecarim “:{” ID “:120,” 钥匙 “:” Hecarim “ ”名“: ”Hecarim“, ”称号“:” 在 影子 战争“},”Fizz“:{”id“:105,”key“:”Fizz“,”name“:”Fizz“,”title“:”潮汐 骗子“}}}
答案 0 :(得分:2)
你有几个问题。您应该知道,如果将json复制到剪贴板,编辑 - > 选择性粘贴 - > 将Json粘贴为类 Visual Studio将为您创建类,为您提供一个不错的起点。在这个的情况下,该工具有点密集,将为#34; Fizz"," Shaco"创建无数相同的类。你已经规范了那个。
但是,使用所有属性Private
,您将无法访问数据。然后,属性名称是错误的。 id
或key
的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
瓦鲁斯
Fiora的
...
约里克是灵魂的牧羊人'