VB.NET如何将JSON数据转为可用格式,是否需要新建对应数据类?
处理方案
方案1:强类型类转换(最优方案,推荐使用)
你的JSON顶层是动态数字字符串作为键,每个键对应的值结构完全一致,使用强类型类转换是最优选择:编译阶段可做属性校验、编码时有智能提示、后续数据操作效率更高,完全不需要手动遍历JSON节点。
步骤1:新建对应的数据实体类
Public Class TenantInfo <JsonProperty("name")> Public Property Name As String <JsonProperty("tenantcode")> Public Property TenantCode As String <JsonProperty("package_id")> Public Property PackageId As Integer <JsonProperty("package")> Public Property Package As String <JsonProperty("ext_length")> Public Property ExtLength As Integer <JsonProperty("country_id")> Public Property CountryId As Integer <JsonProperty("country_code")> Public Property CountryCode As Integer End Class
步骤2:修改业务逻辑代码,直接反序列化
Imports System.Net Imports Newtonsoft.Json Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Using client As New WebClient() Dim json As String = client.DownloadString("https://myapi") ' 直接反序列化为字典,键为JSON顶层的动态数字字符串,值为对应实体对象 Dim result As Dictionary(Of String, TenantInfo) = JsonConvert.DeserializeObject(Of Dictionary(Of String, TenantInfo))(json) ' 遍历使用示例 For Each kvp In result Dim dynamicKey As String = kvp.Key ' 对应"4"、"5"、"8"等动态键 Dim info As TenantInfo = kvp.Value ' 直接调用属性即可,支持智能提示 Console.WriteLine($"键:{dynamicKey},名称:{info.Name},租户编码:{info.TenantCode}") Next ' 单独取指定键值示例 If result.ContainsKey("4") Then Dim warehouseInfo = result("4") ' 直接操作对应属性即可 End If End Using End Sub End Class
方案2:无实体类直接操作JObject(仅适合临时少量操作场景)
如果只是临时用一次不想建类,可以直接遍历JObject的属性取值,不需要额外处理Children节点:
Imports System.Net Imports Newtonsoft.Json.Linq Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Using client As New WebClient() Dim json As String = client.DownloadString("https://myapi") Dim ser As JObject = JObject.Parse(json) For Each item As JProperty In ser.Properties() Dim dynamicKey = item.Name ' 对应顶层动态键 Dim name = item.Value("name").ToString() Dim tenantCode = item.Value("tenantcode").ToString() Dim packageId = item.Value("package_id").ToObject(Of Integer)() ' 其他属性同理取值即可 Console.WriteLine($"键:{dynamicKey},名称:{name},租户编码:{tenantCode}") Next End Using End Sub End Class
内容的提问来源于stack exchange,提问作者Stuart B
相关产品推荐
相关产品推荐

