我是 vb 的新手(大约 2 小时前开始(,我正在尝试将 php 应用程序转换为 vb 以绕过一些不可避免的问题。
但是,我正在尝试从返回 JSON 字符串作为页面源的服务器获取响应(直到这里一切都很好(,我的问题是我不确切了解如何访问反序列化的对象。
这是响应:
{
"response":{
"a":"boolean",
"b":"string",
"c":"string",
"d":"string",
"e":"string",
"f":"string",
"profile":{
"h":"decimal",
"i":"string",
"l":"string",
"m":"string",
"n":"string",
"o":"string",
"p":"string",
"q":"string"
}
}
}
当前 vb 代码:
Public Class Form1
...
Dim jsonResponse As String = New System.Net.WebClient().DownloadString(url)
Dim r As LoginReturn = JsonConvert.DeserializeObject(Of LoginReturn)(jsonResponse)
...
End Sub
Public Class LoginItem
Public a As Boolean
Public apikey As String
Public c As String
Public d As String
Public e As String
Public f As String
Public Property profile As List(Of LoginProfile)
End Class
Public Class LoginProfile
Public h As Decimal
Public i As String
Public l As String
Public m As String
Public n As String
Public o As String
Public p As String
Public q As String
End Class
Public Class LoginResponse
Public Property response As List(Of LoginItem)
End Class
Public Class LoginReturn
Public Property value As List(Of LoginResponse)
End Class
从所有这些信息中,我只需要apikey
所以我试图使用这些来访问它
r.value.response.apikey
r.value(0).response.apikey
两者都返回此错误:
'apikey' is not a memeber of 'System.Collections.Generic.List(Of WindowsApplication1.LoginItem)'.
以前使用 php 我使用了这个:
$r = json_decode(file_get_contents($url));
$_SESSION['a']=$r->response->apikey
所以我的问题是:
- 如何访问该信息?
- 即使不需要它们,我是否需要声明所有这些变量?
编辑解决方案
'Get Json
Dim jsonResponse As String = New System.Net.WebClient().DownloadString(url)
'Parse Json
Dim r As JObject = JObject.Parse(jsonResponse)
'Access Json
GlobalVar.api = r("response")("apikey")
这将向您展示如何解析原始 JSON,以便您可以提取您感兴趣的部分。 由于您只想要一件事,因此您可以使用JObject.Parse
并放弃类来获得您想要的东西。
' you would get it from the webclient
Dim jstr As String = File.ReadAllText("C:Templogresp.json")
Dim api = obj("response")("b")
要阅读其他内容,只需将密钥更改为您想要的任何项目即可。 例如,要读"q":
Dim QItem = obj("response")("profile")("q")
由于q
是profile
的属性,而本身就是response
的孩子,你必须深入挖掘。
如果你最终需要很多东西,你的类不太适合解析成一个类(DeserializeObject
(。 查看JSON,您会发现没有名为"APIKey"的属性。 按位置,它被称为"b"。这可能是在这里发布更改内容的人工制品,但我只能通过发布的内容。