You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET如何解析JSON键与子键?解决BIC子键获取异常

解决VB.NET解析JSON子键"bic"的问题

问题原因

你遇到的KeyNotFoundException是因为"bic"并非JSON的顶级键,它嵌套在bankData对象内部,不能直接通过jsonResulttodict.Item("bic")获取,也不支持"bankData.bic"这种直接的点语法访问嵌套键。

解决方法1:嵌套访问Dictionary

既然你用Dictionary(Of String, Object)来反序列化,需要先获取bankData对应的子字典,再从中提取"bic"值:

修改后的核心代码:

Dim jsonResulttodict = JsonConvert.DeserializeObject(Of Dictionary(Of String, Object))(rawresp)
Dim ibanX = jsonResulttodict.Item("iban")
' 先获取bankData对应的子字典
Dim bankDataDict = DirectCast(jsonResulttodict.Item("bankData"), Dictionary(Of String, Object))
' 从子字典中获取bic
Dim bicX = bankDataDict.Item("bic")
txt1.Text = ibanX
txt2.Text = bicX

解决方法2:使用强类型实体类反序列化(推荐)

对于结构化的JSON,创建对应的实体类进行反序列化会更安全、易维护,避免键名拼写错误和类型转换问题:

  1. 定义匹配JSON结构的实体类:
Public Class OpenIbanResponse
    Public Property Valid As Boolean
    Public Property Messages As List(Of String)
    Public Property Iban As String
    Public Property BankData As BankData
    Public Property CheckResults As CheckResults
End Class

Public Class BankData
    Public Property BankCode As String
    Public Property Name As String
    Public Property Zip As String
    Public Property City As String
    Public Property Bic As String
End Class

Public Class CheckResults
    Public Property BankCode As Boolean
End Class
  1. 修改反序列化代码:
Dim rawresp As String = reader.ReadToEnd()
Dim response = JsonConvert.DeserializeObject(Of OpenIbanResponse)(rawresp)
txt1.Text = response.Iban
txt2.Text = response.BankData.Bic

原问题中的代码与JSON结构

原VB.NET代码:

Dim request As HttpWebRequest
Dim response As HttpWebResponse = Nothing
Dim reader As StreamReader

request = DirectCast(WebRequest.Create("https://openiban.com/v2/calculate/DE/10011001/2624579856"), HttpWebRequest)

response = DirectCast(request.GetResponse(), HttpWebResponse)
reader = New StreamReader(response.GetResponseStream())

Dim rawresp As String
rawresp = reader.ReadToEnd()
Dim jsonResulttodict = JsonConvert.DeserializeObject(Of Dictionary(Of String, Object))(rawresp)
Dim ibanX = jsonResulttodict.Item("iban")
Dim bicX = jsonResulttodict.Item("bic")
txt1.Text = ibanX
txt2.text = bicX

返回的JSON结构:

{
  "valid": true,
  "messages": [
    "Bank code valid: 10011001"
  ],
  "iban": "DE42100110012624579856",
  "bankData": {
    "bankCode": "10011001",
    "name": "N26 Bank",
    "zip": "10179",
    "city": "Berlin",
    "bic": "NTSBDEB1XXX"
  },
  "checkResults": {
    "bankCode": true
  }
}

内容的提问来源于stack exchange,提问作者Mohammed Abdelkrim Mekdour

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 10:25:35