Newtonsoft DeserializeObject“真”不区分大小写
Posted
技术标签:
【中文标题】Newtonsoft DeserializeObject“真”不区分大小写【英文标题】:Newtonsoft DeserializeObject "True" Case Insensitive 【发布时间】:2021-12-22 01:57:16 【问题描述】:我想使用 Newtonsoft.Json.JsonConvert.DeserializeObject
这样的方法将简单的字符串 "True"
反序列化为布尔值 true:
var b = Newtonsoft.Json.JsonConvert.DeserializeObject("True");
但它给了我一个错误。
'Unexpected character encountered while parsing value: T. Path '', line 0, position 0.'
听说Newtonsoft uses case insensitive deserialization by default
为什么会出现这个错误?
【问题讨论】:
为什么不直接使用bool.Parse("True")
?
JSON 通常区分大小写,例如具有两个仅在大小写有效时不同的属性名称。
@Magnus:好吧,这真的是令人困惑。删除我之前的评论。
【参考方案1】:
有效的 JSON 值为:
对象 ( ...
)
数组 ([...]
)
号码 (1
)
字符串 ("String"
)
布尔值(true
或 false
,不是 True
或 False
)
空 (null
)
因此,“true”是表示单个布尔值的有效 JSON。
但是,"True" 不是有效的 json,它不代表上述任何值根据规范(它不代表字符串,因为在这种情况下它应该是 ""True""(带引号)。
【讨论】:
【参考方案2】:如前所述,裸露的 True
值根本不是有效的 JSON。所以 JSON.Net 没有理由接受它。
但是,它将接受字符串值 "True"
或 "true"
代替 bool
var b = Newtonsoft.Json.JsonConvert.DeserializeObject(@"""True""");
// returns true
var f = Newtonsoft.Json.JsonConvert.DeserializeObject(@"""False""");
// returns false
dotnetfiddle
【讨论】:
以上是关于Newtonsoft DeserializeObject“真”不区分大小写的主要内容,如果未能解决你的问题,请参考以下文章
无法将类型“newtonsoft.json.linq.jtoken”隐式转换为 newt“newtonsoft.json.linq.jvalue”
无法解决“Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”与“Newtonsoft
更新Newtonsoft.Json后报异常,未能加载文件或程序集“Newtonsoft.Json
从 JSON 检索项目时获取“无法将 Newtonsoft.Json.Linq.JObject 转换为 Newtonsoft.Json.Linq.JToken”