【问题标题】:Filling a TextBox from JSON using JavaScriptSerializer使用 JavaScriptSerializer 从 JSON 填充文本框
【发布时间】:2019-09-19 18:55:12
【问题描述】:

我正在尝试使用JavaScriptSerializer 从网站 API 中提取一些信息。但是,我是 vb.net 中的新手,似乎无法加载文本框。我认为这与我从网站收到的 JSON 文本有关,该网站顶部有状态,但我不知道如何解决这个问题。

这是 JSON 文本:

{
  "status": "ok",
  "meta": {
    "count": 1
  },
  "data": {
    "1000003149": {
      "members": [
        {
          "account_name": "CHOP210"
        },
        {
          "account_name": "Guns_n_Roses"
        },
        {
          "account_name": "vonhames"
        },
        {
          "account_name": "wiggum99"
        },
        {
          "account_name": "VonChalon"
        },
        {
          "account_name": "FokkerDR1"
        },
        {
          "account_name": "Force12"
        },
        {
          "account_name": "m4irish"
        },
        {
          "account_name": "panzer1_14"
        },
        {
          "account_name": "alchemicalgunner007"
        },
        {
          "account_name": "Morrros"
        },
        {
          "account_name": "jonah128"
        },
        {
          "account_name": "Zy4"
        },
        {
          "account_name": "Terminator6644"
        },
        {
          "account_name": "Dionisiovega"
        }
      ]
    }
  }
}

这是我的代码:

Imports System.Net
Imports System.IO
Imports System.Web.Script.Serialization

Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim uriString As String = "https://api.worldoftanks.com/wot/clans/info/?application_id=c2b5cb8d6c77098c8a9a481e68476b28&clan_id=1000003149&fields=members.account_name"
        Dim uri As New Uri(uriString)

        Dim Request As HttpWebRequest = HttpWebRequest.Create(uri)
        Request.Method = "GET"

        Dim Response As HttpWebResponse = Request.GetResponse()

        Dim Read = New StreamReader(Response.GetResponseStream())
        Dim Raw As String = Read.ReadToEnd()

        Dim dict As Object = New JavaScriptSerializer().Deserialize(Of List(Of Object))(Raw)

        For Each item As Object In dict
            TextBox1.Text += item("account_name").ToString + vbNewLine
        Next

    End Sub

End Class 

我认为文本框无法加载的原因是 JSON 文本的状态和数据部分。现在我只是在填充一个多行文本框,但稍后我需要使用帐户 ID 将它们绑定到一个组合框。

【问题讨论】:

    标签: json vb.net api javascriptserializer


    【解决方案1】:

    问题是您试图将 JSON 反序列化为 List(Of Object) 但 JSON 实际上不是列表;相反,它是一系列嵌套对象,最里面的对象包含成员列表。 (我已在您的问题中重新格式化 JSON 以使其结构更加明显。)您需要创建类来对 JSON 进行建模,然后反序列化为该模型。
    JSON 中的一个奇怪之处是 1000003149 键,我认为它是动态的(看起来这对应于 URL 中的氏族 ID)。所以你需要一本字典来处理那部分。

    以下是对应于 JSON 的类:

    Public Class RootObject
        Public Property status As String
        Public Property meta As Meta
        Public Property data As Dictionary(Of String, Clan)
    End Class
    
    Public Class Meta
        Public Property count As Integer
    End Class
    
    Public Class Clan
        Public Property members As List(Of Member)
    End Class
    
    Public Class Member
        Public Property account_name As String
    End Class
    

    然后,您可以像这样反序列化并填充您的 TextBox:

    Dim jss As New JavaScriptSerializer
    Dim root As RootObject = jss.Deserialize(Of RootObject)(Raw)
    
    For Each member As Member In root.data.First().Value.members
        TextBox1.Text += member.account_name + vbNewLine
    Next
    

    【讨论】:

    • 非常感谢您在此提供的帮助 Brian。现在我可以列出这些输出,我可以对它们做任何我需要的事情。我真的很感激。
    • 没问题;很高兴我能帮上忙。
    猜你喜欢
    • 2019-01-29
    • 1970-01-01
    • 2023-03-27
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多