JSON反序列化为VB.Net对象

JSON反序列化为VB.Net对象,json,vb.net,deserialization,Json,Vb.net,Deserialization,我读过其他答案,但我似乎还是迷路了。我试图将JSON引入到我的对象中。我通过API调用JSON字符串,并希望在RequestManager之后将其转换为对象。我是缺少方法还是什么?此外,returnChampions2函数错误。我在方法之后发布了部分JSON字符串,它非常长 公共类请求管理器 Public Function returnChampions2(ByVal strRegion As String) As LeagueChampionMaster Dim strRequest

我读过其他答案,但我似乎还是迷路了。我试图将JSON引入到我的对象中。我通过API调用JSON字符串,并希望在RequestManager之后将其转换为对象。我是缺少方法还是什么?此外,returnChampions2函数错误。我在方法之后发布了部分JSON字符串,它非常长

公共类请求管理器

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:

{“type”:“champion”,“version”:“6.24.1”,“data”:{“Jax”:{“id”:24,“key”:“Jax”,“name”:“Jax”,“title”:“Grandmaster” 在Arms“},“Sona”:{“id”:37,“key”:“Sona”,“name”:“Sona”,“title”:“Maven of of of the 这个 字符串“}”,特里斯塔纳:{“id”:18,“key”:“特里斯塔纳”,“name”:“特里斯塔纳”,“title”:“the 约德尔 炮手“}”,瓦鲁斯:{“id”:110,“钥匙”:“瓦鲁斯”,“姓名”:“瓦鲁斯”,“头衔”:“the 箭 报应“}”,菲奥拉:{“id”:114,“key”:“菲奥拉”,“name”:“菲奥拉”,“title”:“the 宏伟的 Duelist“}”,signed:{“id”:27,“key”:“signed”,“name”:“signed”,“title”:“the Mad化学家“}”,TahmKench:{“id”:223,“key”:“TahmKench”,“name”:“Tahm” 肯奇,“头衔”:“河流” 国王“},“勒布朗”:{“id”:7,“key”:“勒布朗”,“name”:“勒布朗”,“title”:“the 欺骗者“}”,Thresh:{“id”:412,“key”:“Thresh”,“name”:“Thresh”,“title”:“the 链条 典狱长“},“因果报应”:{“id”:43,“钥匙”:“因果报应”,“姓名”:“因果报应”,“头衔”:“the 开明的 一个“}”,Jhin:{“id”:202,“key”:“Jhin”,“name”:“Jhin”,“title”:“the 名家“},“隆隆声”:{“id”:68,“key”:“隆隆声”,“name”:“隆隆声”,“title”:“the 机械化 威胁“}”,乌迪尔“{”id“:77,“key“:”乌迪尔“,”姓名“:”乌迪尔“,”头衔“:”the 灵行者:{“id”:64,“key”:“LeeSin”,“name”:“Lee” 罪、头衔:“盲人” 和尚“}”,约里克:{“id”:83,“钥匙”:“约里克”,“姓名”:“约里克”,“头衔”:“牧羊人” 属于 灵魂“}”,卡萨丁:{“id”:38,“key”:“卡萨丁”,“姓名”:“卡萨丁”,“头衔”:“the 无效的 Walker“}”,Sivir:{“id”:15,“key”:“Sivir”,“name”:“Sivir”,“title”:“the 战争 情妇“},“失意”:{“id”:21,“钥匙”:“失意”,“姓名”:“小姐” 《财富》,《头衔》:“赏金” 猎人“},“德拉文”:{“id”:119,“钥匙”:“德拉文”,“姓名”:“德拉文”,“头衔”:“the 光荣的 刽子手},“亚索”:{“id”:157,“键”:“亚索”,“姓名”:“亚索”,“头衔”:“the 不可原谅的“}”,Kayle:{“id”:10,“key”:“Kayle”,“name”:“Kayle”,“title”:“The 司法官“}”,Shaco:{“id”:35,“键”:“Shaco”,“姓名”:“Shaco”,“头衔”:“the 魔鬼 Jester“}”,Renekton:{“id”:58,“key”:“Renekton”,“name”:“Renekton”,“title”:“the 屠夫 Sands“}”,Hecarim:{“id”:120,“key”:“Hecarim”,“name”:“Hecarim”,“title”:“the 阴影 War“},“Fizz”:{“id”:105,“key”:“Fizz”,“name”:“Fizz”,“title”:“the thide” 骗子“}}}


你有几个问题。您应该知道,如果您将json复制到剪贴板,编辑->特殊粘贴->将json粘贴为类Visual Studio将为您创建类,为您提供一个良好的起点。在本例中,该工具有点密集,将为“Fizz”、“Shaco”等创建无数相同的类。您已经对其进行了规范化

但是,使用所有属性
Private
,您将无法访问数据。那么,属性名称就错了。
id
key
的json键不会映射/反序列化到
\u id
\u key
,因为它们不匹配。最后,数据收集应该是一个
字典
。每个球员/冠军/物品的钥匙将用作
字典
钥匙:

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)
(部分)产出:

Jax
索纳
特里斯塔纳
内翻
菲奥拉

约里克是“灵魂的守护者”


首先,将属性更改为Public,否则您将无法访问数据。然后属性名需要与json匹配:
\u id
不会匹配
id
-去掉下划线。另外,数据应该是一个字典,这样你就不必为Fizz定义一个与“ziggy”相同的类。你用
Edit->Paste Special->Paste Json as class
?Visual Studio-我想从VS2010@MrGadget开始,我将进行编辑以使其更清晰,它没有说什么会创建它们,我找到了它…这是有原因的(谢谢,谷歌)。在我看来不是很特别-复制到剪贴板,点击,点击一个确实需要创建一个类文件,打开并聚焦。如果没有,或者您关注的是解决方案资源管理器,那么这是行不通的(我实际上得到的是粘贴为XML类,剪贴板上满是JSON,什么都不做…)。