使用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
相关产品推荐
相关产品推荐

