VB.NET新手求助:如何从API提取数据填充至ListView列
VB.NET解析Trackmania API数据并填充ListView的解决方案
为什么别用正则?
API返回的是标准JSON格式,正则匹配结构化数据容易因为格式细节(如空格、键值对顺序变化)失效,且代码可读性差,用专门的JSON解析库才是可靠方案。
步骤1:定义对应JSON结构的类
创建一个和API返回数据字段匹配的类,让解析库能自动映射数据:
Public Class TrackData Public Property TrackId As Integer Public Property TrackName As String End Class
步骤2:发送HTTP请求并解析JSON
使用.NET内置的HttpClient发送请求,结合System.Text.Json(无需额外安装)解析数据,再填充到ListView:
Imports System.Net.Http Imports System.Text.Json Imports System.Windows.Forms Private Async Sub btnLoadTracks_Click(sender As Object, e As EventArgs) Handles btnLoadTracks.Click ' 初始化ListView的显示模式和列 ListView1.View = View.Details If ListView1.Columns.Count = 0 Then ListView1.Columns.Add("TrackId", 100) ListView1.Columns.Add("TrackName", 300) End If ListView1.Items.Clear() Dim apiUrl As String = "https://tmnf.exchange/api/tracks?author=lolsport&count=40&fields=TrackId%2CTrackName" Using httpClient As New HttpClient() Try ' 异步获取API返回的JSON字符串 Dim jsonResponse As String = Await httpClient.GetStringAsync(apiUrl) ' 将JSON反序列化为TrackData对象列表 Dim tracks As List(Of TrackData) = JsonSerializer.Deserialize(Of List(Of TrackData))(jsonResponse) ' 遍历数据填充ListView For Each track In tracks Dim listItem As New ListViewItem(track.TrackId.ToString()) listItem.SubItems.Add(track.TrackName) ListView1.Items.Add(listItem) Next Catch ex As Exception MessageBox.Show($"加载失败: {ex.Message}") End Try End Using End Sub
兼容旧.NET版本的方案(使用Json.NET)
如果你的项目基于.NET Framework且无法使用System.Text.Json,可以通过NuGet安装Newtonsoft.Json包,然后修改解析部分:
Imports Newtonsoft.Json ' 替换原解析代码为: Dim tracks As List(Of TrackData) = JsonConvert.DeserializeObject(Of List(Of TrackData))(jsonResponse)
注意事项
- 确保在UI线程中更新ListView(上述代码在按钮点击事件中执行,默认是UI线程,无需额外处理)
- 异步请求避免阻塞UI界面,提升用户体验
- 异常处理能捕获网络错误、JSON解析错误等问题,方便排查
内容的提问来源于stack exchange,提问作者Robi SE.
相关产品推荐
相关产品推荐

