C#使用JObject.Parse转JSON时报Current JsonReader item is not an object错误如何解决
C# JObject.Parse解析JSON字符串异常解决方案
异常原因
你遇到的报错:
Error reading JObject from JsonReader. Current JsonReader item is not an object: String. Path '', line 1, position 6。
完全是手动移除JSON字符串首尾{}导致的:
JObject.Parse()的输入要求是完整的JSON对象字符串,本身就要求输入内容带外层{},不会额外添加符号- 你观察到的「解析后多一层
{}」是正常现象:JObject是JSON对象的内存映射,输出序列化时必然会带外层{},不属于方法额外添加的内容 TrimStart/TrimEnd、Substring操作都会破坏原始JSON结构,自然无法解决问题
解决步骤
- 立即停止对原始
query字符串做任何移除首尾{}的操作,恢复原始完整的JSON输入 - 如果确认原始
query本身就是不带外层{}的键值对片段,手动补全外层{}后再解析 - 解析前可以先调用
Trim()移除字符串首尾的空白字符,避免空格导致的格式校验失败
代码示例
错误写法
// 提前移除外层{},输入字符串不符合JSON对象格式要求 string brokenQuery = rawQuery.Trim('{', '}'); JObject jsonQuery = JObject.Parse(brokenQuery); // 抛出异常
正确写法
// 常规场景:原始query是合法JSON对象,直接解析 JObject jsonQuery = JObject.Parse(rawQuery.Trim()); // 特殊场景:原始query确实是无外层{}的键值对片段,先补全格式 string processedQuery = rawQuery.Trim(); if (!processedQuery.StartsWith("{") && !processedQuery.EndsWith("}")) { processedQuery = $"{{{processedQuery}}}"; } JObject jsonQuery = JObject.Parse(processedQuery);
注意事项
- 不要随意用字符串截取、修剪方法处理JSON结构,很容易破坏合法内容
- 解析前如果不确定格式是否合法,可以先将原始字符串输出到控制台/日志,手动校验格式是否符合JSON对象规范
内容的提问来源于stack exchange,提问作者MarkCo
相关产品推荐
相关产品推荐

