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

Google Maps Geocode API JSON结果VB.NET反序列化报错问题

反序列化错误原因排查及修复

核心原因:反序列化目标类型不匹配

Google地理编码API返回的JSON根结构是包含results数组和status字段的对象,而非直接的Result数组。你当前直接将JSON字符串反序列化为Result()类型,与实际JSON结构不匹配,这是报错的主要原因。

API返回的JSON简化结构如下:

{
  "results": [
    { /* Result对象详情 */ }
  ],
  "status": "OK"
}

你已经定义了匹配该根结构的Root类,但代码中未使用,反而错误地直接反序列化为Result数组,导致结构不匹配报错。

关于转义字符与换行符的说明

你提到的换行符(vbLf)和转义字符属于JSON的格式化输出,Newtonsoft.Json默认可以正常解析这类格式化后的JSON字符串,无需额外处理,这不是报错的根源。

修复步骤

  1. 修正反序列化代码:将目标类型改为Root类,而非Result()数组:
Dim client As WebClient = New WebClient()
client.Encoding = Encoding.UTF8 ' 确保编码正确,避免乱码引发的隐性错误
Dim uri As Uri = GetGeocodeUri(address)

Dim geocodeInfo As String = client.DownloadString(uri) 
Dim root As Root = JsonConvert.DeserializeObject(Of Root)(geocodeInfo)
' 从Root对象中获取Result列表
Dim test As List(Of Result) = root.results
  1. 验证JSON有效性(可选):如果仍有问题,可先将JSON解析为JObject确认结构是否符合预期:
Dim jsonObj As Newtonsoft.Json.Linq.JObject = Newtonsoft.Json.Linq.JObject.Parse(geocodeInfo)
' 输出状态和结果数量,验证数据获取是否正常
Console.WriteLine($"Status: {jsonObj("status")}, Results Count: {jsonObj("results").Count()}")
  1. 处理API异常状态:建议加入对root.status的判断,仅当status为"OK"时再处理结果,避免API返回错误(如"ZERO_RESULTS"、"INVALID_REQUEST")导致后续逻辑出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:06:10