如何反序列化字典并获取指定键值?解决Status键取值报错问题
解决方法分析
你的问题出在这个字符串是双重序列化的结果:数据库里存的是把JSON数组先序列化成字符串再存储的,所以拿到的a实际是一个被双引号包裹的JSON数组字符串,直接用JArray.Parse或JObject.Parse都会因为格式不合法报错。
具体解决步骤
方法1:手动清理外层引号(简单直接)
原字符串在运行时的实际内容是"[{\"Status\":\"Passed\"}]",先去掉首尾的双引号再解析:
string a = "\"[{\\\"Status\\\":\\\"Passed\\\"}]\""; // 去除首尾的双引号 string cleanedJson = a.Trim('"'); // 解析为JSON数组 JArray jArray = JArray.Parse(cleanedJson); // 获取第一个元素的Status值 string status = jArray[0]["Status"].ToString();
方法2:用JsonConvert反序列化获取内部JSON(更安全)
如果担心字符串里有特殊情况(比如中间也出现双引号),可以用Newtonsoft.Json的反序列化先拿到内部的JSON数组字符串,再解析:
string a = "\"[{\\\"Status\\\":\\\"Passed\\\"}]\""; // 先反序列化为内部的JSON字符串 string innerJson = JsonConvert.DeserializeObject<string>(a); // 解析为JSON数组 JArray jArray = JArray.Parse(innerJson); string status = jArray[0]["Status"].ToString();
为什么之前报错?
- 直接用
JArray.Parse(a)时,a的内容是带外层双引号的,不符合JSON数组的语法规则(JSON数组开头应该是[,而不是"),所以解析失败。 - 用
JObject.Parse(a)更不合适,因为内容本质是数组结构,不是JSON对象。
内容的提问来源于stack exchange,提问作者devPy
相关产品推荐
相关产品推荐

