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

VB.NET 解析 Google Books API 及访问类属性问题咨询

问题原因

你出现报错是因为3个核心错误:

  1. 反序列化目标类型错误:GoogleBookData是仅用于包裹嵌套子类的容器类,本身没有对应JSON结构的属性,实际API返回的JSON根结构对应的是你定义的GoogleBookData.Rootobject类。
  2. 属性访问路径错误:Item是嵌套类的类名,不是GoogleBookData的属性,且根对象下的items是数组类型,需要按下标取对应元素。
  3. 层级不对:title属性属于Volumeinfo类,需要先访问Item下的volumeInfo属性才能读取。

修正方案

1. 修正反序列化函数

调整函数返回类型为GoogleBookData.Rootobject,同时添加资源释放逻辑避免内存泄漏:

Public Shared Function getGoogleBookData(ByVal sSku As String) As GoogleBookData.Rootobject
    Dim url As String = "https://www.googleapis.com/books/v1/volumes?q=isbn:" & sSku
    Dim request As HttpWebRequest = WebRequest.Create(url)
    Using response As HttpWebResponse = DirectCast(request.GetResponse(), HttpWebResponse)
        Using reader As New StreamReader(response.GetResponseStream())
            Dim myJson As String = reader.ReadToEnd()
            Dim serializer As New System.Web.Script.Serialization.JavaScriptSerializer()
            Return serializer.Deserialize(Of GoogleBookData.Rootobject)(myJson)
        End Using
    End Using
End Function

2. 修正属性访问代码

先判断返回结果是否为空,再按层级读取属性:

Dim gsSearchSku As String = "9780979799006"
Dim bookRoot As GoogleBookData.Rootobject = getGoogleBookData(gsSearchSku)
Dim sTitle As String = String.Empty
' 校验返回结果合法性
If bookRoot.totalItems > 0 AndAlso bookRoot.items IsNot Nothing AndAlso bookRoot.items.Length > 0 Then
    ' 取第一条匹配结果的书名
    sTitle = bookRoot.items(0).volumeInfo.title
End If

内容的提问来源于stack exchange,提问作者user2103442

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:15:03