访问反序列化 JSON 并避免 var 声明



我是 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

所以我的问题是:

  1. 如何访问该信息?
  2. 即使不需要它们,我是否需要声明所有这些变量?



编辑解决方案

'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")

由于qprofile的属性,而本身就是response的孩子,你必须深入挖掘。

如果你最终需要很多东西,你的类不太适合解析成一个类(DeserializeObject(。 查看JSON,您会发现没有名为"APIKey"的属性。 按位置,它被称为"b"。这可能是在这里发布更改内容的人工制品,但我只能通过发布的内容。

相关内容

  • 没有找到相关文章

最新更新