VB.NET 解析 Google Books API 及访问类属性问题咨询
问题原因
你出现报错是因为3个核心错误:
- 反序列化目标类型错误:
GoogleBookData是仅用于包裹嵌套子类的容器类,本身没有对应JSON结构的属性,实际API返回的JSON根结构对应的是你定义的GoogleBookData.Rootobject类。 - 属性访问路径错误:
Item是嵌套类的类名,不是GoogleBookData的属性,且根对象下的items是数组类型,需要按下标取对应元素。 - 层级不对:
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
相关产品推荐
相关产品推荐

