代码突发System.FormatException错误,请求排查JSON坐标解析失败原因
解决从JSON获取坐标时的System.FormatException错误
这种突然炸锅的格式错误真的挺闹心的——之前代码跑的好好的,突然就报System.FormatException: Input string was not in a correct format,十有八九是JSON返回的坐标数据出了幺蛾子,咱们一步步捋清楚怎么排查解决:
1. 先揪出异常的根源
你贴的代码里直接用了codecLatitude和codecLongitude创建LatLng,但没看到你从JSON解析这两个值的逻辑。这个异常本质就是把非数字格式的字符串转成数字(比如double/float)时失败了——常见的触发场景有这些:
- JSON里的坐标字段突然返回了空字符串、
null,或者是"N/A"、"未知"这类文本 - 数字格式不对,比如多了空格、逗号(比如欧洲地区用逗号当小数点)
- 后端改了JSON的字段名,比如原来叫
latitude,现在改成lat了,导致你解析到的是空值
先加个日志或者断点,把解析出来的原始字符串打出来看看:
// 举个你可能的解析逻辑例子,替换成你实际的代码 string latStr = yourJsonObj["latitude"].ToString(); string lngStr = yourJsonObj["longitude"].ToString(); // 打印出来看看实际拿到的是什么 Console.WriteLine($"当前解析的纬度字符串:{latStr},经度字符串:{lngStr}");
2. 针对性的修复方案
方案一:给转换加容错,避免直接炸锅
别用强制转换(比如double.Parse()),改用double.TryParse(),这样即使遇到非法值也不会抛出异常,还能优雅处理:
double targetLat, targetLng; // 先判断字符串能不能转成合法数字 if (double.TryParse(latStr, out targetLat) && double.TryParse(lngStr, out targetLng)) { LatLng location = new LatLng(targetLat, targetLng); // 继续你的地图初始化逻辑 } else { // 处理非法坐标的情况:比如给个默认坐标,或者提示用户 LatLng defaultLocation = new LatLng(39.9042, 116.4074); // 示例:北京坐标 // 或者弹个提示告诉用户"获取位置失败,请重试" }
如果遇到的是逗号当小数点的国际化格式问题,就指定文化信息来解析:
// 处理欧洲地区的数字格式 if (double.TryParse(latStr, NumberStyles.Float, CultureInfo.InvariantCulture, out targetLat)) { // 转换成功 }
方案二:检查JSON数据源的变化
既然之前代码正常,现在出错,大概率是后端返回的JSON变了:
- 对比之前正常返回的JSON和现在的JSON,看看坐标字段的名字、值有没有变化
- 确认后端是不是新增了异常场景(比如某些情况下没有坐标,就返回了空值)
3. 额外的调试小技巧
- 把当前拿到的JSON内容复制出来,用本地的JSON格式化工具(比如VS Code的插件)打开,一眼就能看到坐标字段的实际值
- 转成数字之后,可以加个判断,确保坐标在合理范围内(纬度-90到90,经度-180到180),避免即使转换成功但坐标无效的情况
内容的提问来源于stack exchange,提问作者Mona ibrahim
相关产品推荐
相关产品推荐

