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

代码突发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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:56:55