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

使用JsonDocument.Parse解析JSON时如何保留浮点数字符串原格式?

解决System.Text.Json.JsonDocument解析浮点型的精度问题

你遇到的浮点精度问题,本质是JSON中的十进制浮点数被解析为double类型时,部分数值无法被二进制浮点数精确存储导致的。不用创建大量属性的实体类,有两个简单方法可以获取原始的数字字符串:

方法1:直接调用JsonElement.GetRawText()获取原始文本

JsonDocument解析后的JsonElement保留了JSON中的原始文本片段,针对需要的浮点字段调用GetRawText()就能拿到它在JSON中的原样字符串,无需额外配置:

string jsonString = "{ \"code\": 2312, \"price\": 98.322 }";
using JsonDocument doc = JsonDocument.Parse(jsonString);
JsonElement root = doc.RootElement;

// 获取price的原始字符串,结果为"98.322"
string rawPrice = root.GetProperty("price").GetRawText();
// 整数字段正常解析类型即可
int code = root.GetProperty("code").GetInt32();

这个方法适合只需要处理部分浮点字段的场景,操作简单直接。

方法2:全局配置数字处理规则(如需批量处理)

如果需要让所有数字字段都以字符串形式读取,可以通过JsonDocumentOptions配置解析规则,结合JsonNumberHandling.AllowReadingFromString:

var options = new JsonDocumentOptions
{
    ReaderOptions = new JsonReaderOptions
    {
        NumberHandling = JsonNumberHandling.AllowReadingFromString
    }
};

using JsonDocument doc = JsonDocument.Parse(jsonString, options);
JsonElement root = doc.RootElement;
// 此时可以直接将price解析为字符串
string priceStr = root.GetProperty("price").GetString();

不过这种方式会影响所有数字字段的解析逻辑,按需使用即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 22:29:59