JSON反序列化为VB.Net对象
我读过其他答案,但我似乎还是迷路了。我试图将JSON引入到我的对象中。我通过API调用JSON字符串,并希望在RequestManager之后将其转换为对象。我是缺少方法还是什么?此外,returnChampions2函数错误。我在方法之后发布了部分JSON字符串,它非常长 公共类请求管理器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
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,什么都不做…)。