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

Newtonsoft.Json.JsonConvert.DeserializeObject反序列化字符串"True"报错,默认大小写不敏感为何出现该问题?

问题解析:为什么JsonConvert.DeserializeObject("True")会报错?

哦,这个问题我之前也踩过类似的坑!咱们一步步拆解核心原因:

1. JSON语法的硬规则

JSON规范里,布尔值的字面量只能是小写的true或false,大写的"True"并不是合法的JSON布尔值。当你调用不带泛型参数的JsonConvert.DeserializeObject(string)时,Newtonsoft会先尝试把输入字符串当作标准JSON来解析——这一步是严格遵循JSON语法的,所以看到T开头的字符就直接报错了,因为它不符合JSON布尔值的定义。

2. 大小写不敏感的适用场景

你提到的Newtonsoft默认大小写不敏感,其实是针对类型映射阶段的:比如反序列化到类的属性时,属性名大小写不匹配也能正确映射;或者反序列化枚举值时,大小写不敏感也能识别。但这不适用于JSON本身的语法字面量验证。

解决办法

要正确把"True"反序列化为布尔值,有两种简单的方式:

方式一:使用泛型版本的反序列化方法

明确指定目标类型为bool,此时Newtonsoft会跳过严格的JSON字面量校验,直接尝试将字符串转换为布尔类型,这时候大小写就不影响了:

var b = Newtonsoft.Json.JsonConvert.DeserializeObject<bool>("True"); 
// 成功返回true

方式二:传入符合JSON规范的布尔字面量

如果坚持用不带泛型的方法,只需要把字符串改成小写的"true"即可:

var b = Newtonsoft.Json.JsonConvert.DeserializeObject("true"); 
// 成功返回object类型的true

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 01:09:05