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

如何反序列化字典并获取指定键值?解决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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 05:30:46