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

