Asp.net Visual basic和Json.net Web请求

Asp.net Visual basic和Json.net Web请求,asp.net,json,vb.net,basic,Asp.net,Json,Vb.net,Basic,基本上我想做的就是制作一个程序,列出传奇联盟的游戏信息。。使用该API提取数据。其工作原理是搜索用户名,它返回一个链接到该帐户的整数,然后使用该整数搜索该帐户的所有信息,例如帐户级别、赢家、输家等。 我遇到了一个似乎无法解决的问题。。请不要告诉我,我对Json.net非常陌生,所以对使用Json.net几乎没有经验。。下面是如何搜索用户ID的,第一部分是用户名减去名称中的空格,下一部分是ID,这是我需要的信息 {"chucknoland":{"id":273746,"name":"Chuck N

基本上我想做的就是制作一个程序,列出传奇联盟的游戏信息。。使用该API提取数据。其工作原理是搜索用户名,它返回一个链接到该帐户的整数,然后使用该整数搜索该帐户的所有信息,例如帐户级别、赢家、输家等。 我遇到了一个似乎无法解决的问题。。请不要告诉我,我对Json.net非常陌生,所以对使用Json.net几乎没有经验。。下面是如何搜索用户ID的,第一部分是用户名减去名称中的空格,下一部分是ID,这是我需要的信息

{"chucknoland":{"id":273746,"name":"Chuck Noland","profileIconId":662,"summonerLevel":30,"revisionDate":1434821021000}}
我必须声明变量错误,才能获得数据,因为我所做的一切都返回0

以下是我必须在其中存储ID的类

    Public Class ID
    Public Shared id As Integer
    Public Shared name As String
End Class
看看前面的例子

他们可以通过创建一个包含所有内容的容器类来解决这个问题。。我的问题是我寻找的数据总是在变化。。第一组始终与示例中显示的“Chucknoland”不同。。有人能解释我如何提取这些信息吗

请注意,变量rRegion的值为OCE上的服务器,Chuck Noland的值为OCE,sSearch的值为用户名。。由于API键的问题,我不得不从代码中删除API键。。。但是URL返回提供的Json

 'URL string used to grab Summoner ID
    jUrlData = "https://oce.api.pvp.net/api/lol/" + rRegion + "/v1.4/summoner/by-name/" + sSearch + 


    ' Create a request for URL Data.
    Dim jsonRequest As WebRequest = WebRequest.Create(jUrlData)

    'request a response from the webpage
    Dim jsonResponse As HttpWebResponse = CType(jsonRequest.GetResponse(), HttpWebResponse)

    'Get Data from requested URL
    Dim jsonStream As Stream = jsonResponse.GetResponseStream()

    'Read Steam for easy access
    Dim jsonReader As New StreamReader(jsonStream)

    'Read Content
    Dim jsonResponseURL As String = jsonReader.ReadToEnd()


    jUrlString = jsonResponseURL
这是我必须获得信息的请求,这是我试图用来显示json ID的代码

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

    Dim obj As ID

    obj = JsonConvert.DeserializeObject(Of ID)(jUrlString)

    MsgBox(obj.id)


End Sub

有人能解释一下我如何让它工作吗?

处理这个问题的一种方法是将项目放入字典,其中键是属性名

除非您只想要
name
id
而不想要其余的信息,否则您的类并不完全正确。但是使用字典你无论如何都不需要它。“诀窍”是跳过第一部分,因为你不知道名字。我可以想出两种方法,但可能有更多/更好的方法

由于json大量使用字符串键,请创建一个字典,然后从中获取实际项的数据:

jstr=。。。从哪里来的
“创建字典
Dim jResp=JsonConvert.DeserializeObject(字典的(字符串的,对象的))(jstr)
'获取第一个/唯一的值项
Dim jobj=jResp.Values(0)'仅1项
'如果您最终需要名称/密钥:
'Dim key As String=jResp.Keys(0)
'将第一项反序列化到字典
Dim myItem=JsonConvert.DeserializeObject(字典的(字符串的,对象的))(jobj.ToString)
'查看结果
对于myItem中的每个kvp作为KeyValuePair(字符串、对象)的
WriteLine(“k:{0}v:{1}”、kvp.Key、kvp.Value.ToString)
下一个
输出:

k:IDV:273746
k:姓名v:查克·诺兰
k:profileIconId v:662
k:召唤级别v:30
k:修订日期v:143482101000

使用
String,String
也可以工作,但它会将数字转换为String(
30
变成
“30”
),这通常是不可取的

在四处摸索时,我找到了获取对象数据的另一种方法,但我不确定这是否是一个好主意:

”解析到JObject
Dim js As JObject=JObject.Parse(jstr)
'1=第一项;2+将是个人道具
Dim jT As JToken=js.substands(1)
'将令牌解析为字符串/对象对
Dim myItem=JsonConvert.DeserializeObject(字典的(字符串的,对象的))(jT.ToString)

相同的结果。

第一组将始终…
是否有多个人/项目/用户返回给您?@puropoix否,它将始终是一个用户返回给我,始终是相同的信息,只有第一个区域发生了更改,当调用用户名时,它将始终是用户名和ID。。我只是不知道如何让该用户正确返回:/您能解释如何将其放入数组中吗?对不起,你把我弄糊涂了,就像我说的。。我对Json.net非常陌生。。首先,我没有那么多的经验/什么让人困惑?它有3行代码,每行代码都有自己的注释。为什么它需要在一个数组中?
字典
是一个非常好的集合,它会将标识符(例如“名称”)与数据一起保留。很抱歉,我以前从未使用过字典。。所以我不知道它是如何工作的,我需要经常给收款人打电话你说的给收款人打电话是什么意思?引用其中的数据或反序列化大量json字符串?有关它们的信息,请参阅