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

Newtonsoft.Json.Linq.Item行为异常:JSON解析后数值小数点转为逗号的问题咨询

解决Newtonsoft.Json.Linq返回小数用逗号分隔的问题

我完全理解这个问题有多棘手——明明系统区域设置选了美国,可Newtonsoft.Json却把小数点换成了逗号,直接导致大量解析报错。咱们一步步来搞定它:

核心原因

Newtonsoft.Json的JToken.ToString()方法默认会使用当前线程的CurrentCulture(而非CurrentUICulture)来格式化数值。你提到CurrentUICulture的货币小数分隔符是点,但很可能CurrentCulture的小数分隔符被设置成了逗号(这可能是系统隐藏设置或其他程序篡改导致的),这才是问题的根源。

直接解决方案:强制使用不变文化(InvariantCulture)

最稳妥的方式是在调用ToString()时明确指定CultureInfo.InvariantCulture,这样无论系统区域如何,都会始终输出英文小数点。

修改你的VB.NET代码

把原来的.ToString()替换为带参数的重载,同时优化解析逻辑避免异常:

Private Shared Function grabValueOfActualQuote(grabform As JObject, frontstr As String) As Decimal
    Dim token = grabform.Item(frontstr)
    ' 先检查token是否存在、为空或null
    If token Is Nothing OrElse token.Type = JTokenType.Null OrElse String.IsNullOrEmpty(token.ToString()) Then
        Return 0D
    End If

    ' 关键:用不变文化ToString,确保小数点是英文点
    Dim valueInString = token.ToString(Newtonsoft.Json.Formatting.None, System.Globalization.CultureInfo.InvariantCulture)
    
    ' 解析时也用不变文化,彻底避免区域干扰
    Dim output As Decimal
    If Decimal.TryParse(valueInString, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, output) Then
        Return output
    Else
        ' 可选:添加日志记录解析失败的情况,方便排查
        Return 0D
    End If
End Function

单行测试代码的修复

你用来测试的单行代码也可以改成:

JObject.Parse("{\"volume\": 5074364.34541878}").Item("volume").ToString(Newtonsoft.Json.Formatting.None, System.Globalization.CultureInfo.InvariantCulture)

这样返回的结果就会是5074364.34541878,小数点不会被替换。

系统层面的排查(可选)

如果想彻底解决系统设置的异常,可以检查以下几点:

  • 打开Windows设置→时间和语言→区域,点击“其他日期、时间和区域设置”
  • 选择“更改日期、时间或数字格式”,切换到格式选项卡,点击“其他设置”
  • 确认“小数符号”是.(英文点),而不是逗号。有时候即使区域选了美国,这个细节设置也可能被手动修改或其他程序篡改

额外建议:全局文化设置(谨慎使用)

如果你希望整个程序都使用统一的文化规则,可以在程序启动时设置CurrentCulture和CurrentUICulture:

Threading.Thread.CurrentThread.CurrentCulture = New System.Globalization.CultureInfo("en-US")
Threading.Thread.CurrentThread.CurrentUICulture = New System.Globalization.CultureInfo("en-US")

不过这个操作会影响程序所有依赖区域的功能(比如日期、货币显示),所以只在确认整个程序都需要美国文化时使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 16:39:03