【发布时间】:2016-05-31 09:53:08
【问题描述】:
大家好,感谢您的关注。我对 vb.net 比较陌生,对在 vb 中解析 json 非常陌生。我正在使用 JSON.Net,并且希望从以下 JSON 中收集数据。
http://hastebin.com/bagiyetece.apache
我为每个“部分”创建了类。我不确定正确的术语。
第一课:
Public Class StatsWrapper
Public SummonerID as Long
Public PlayerStatSummaries as playerStatSummaryTypeWrapper
End Class
二班:
Public Class playerStatSummaryTypeWrapper
Public playerStatSummaryType As String
Public wins As Long
Public modifyDate As Long
Public aggregatedStats As aggregatedStatsWrapper
End Class
第三课:
http://hastebin.com/qopanafabe.php
我的最终目标是能够为“Cap5x5”的 playerStatSummaryType 获取诸如“totalChampionKills”之类的元素并将它们插入到 datagridview 中。
我已经能够通过使用 JObject.Parse 正确解析以下 JSON。
{"UserName":{"id":84737282,"name":"UserName","profileIconId":660,"summonerLevel":30,"revisionDate":1455686689000}}
要获取 id 对象,我会使用:
Dim JSONDerulo = JObject.Parse(JSONResponse)
Dim SummonerID = JSONDerulo(LCase(ToolStripTextBox1.Text))("id")
其中 ToolStripTextBox1.Text 是用户名。
当我尝试将与上述相同的逻辑应用于不同子中的较大 JSON 文件时:
Dim JSONDerulo = JObject.Parse(JSONResponse)
Dim PlayerStatSummaries = JSONDerulo("playerStatSummaries")
Dim Jarray As JArray = PlayerStatSummaries
我可以这样做:
For Each obj As JObject In Jarray
TextBox2.Text = TextBox2.Text + Environment.NewLine + obj.ToString + Environment.NewLine
Next
或者调用 Jarray(1) 并再次对其进行解析,但每个 UserName 的游戏类型列表会有所不同。不过,我确实对每种游戏类型都有一个主列表:
AramUnranked5x5, Ascension, Bilgewater, CAP5x5, CoopVsAI, CoopVsAI3x3, CounterPick, FirstBlood1x1, FirstBlood2x2, Hexakill, KingPoro, NightmareBot, OdinUnranked, OneForAll5x5, RankedPremade3x3, RankedPremade5x5, RankedSolo5x5, RankedTeam3x3, RankedTeam5x5, SummonersRift6x6, Unranked, Unranked3x3, URF, URFBots
如果我想(例如)调用 AramUnranked5x5.TotalChampionKills 或类似的东西,我是否必须为每种类型创建一个类?
有什么建议或想法吗?
再次感谢
【问题讨论】:
-
如果解析 json,通常不需要类,这些类用于反序列化回对象。这些类大多是正确的——
playerStatSummaryTypeWrapper应该有一个Property losses As Integer。一个对象不需要 DGV,PropertyGrid 可能是更好的选择 -
我能否使用 for 循环将 Jarray 中的每个项目反序列化为 playerStatSummaryTypeWrapper?
-
是的(顶级类稍微偏离了数组,所以
PlayerStatSummaries as playerStatSummaryTypeWrapper()。或者将它们全部反序列化为playerStatSummaryTypeWrapper的数组,也许这样:stackoverflow.com/q/31084143会有所帮助