.NET Core 7中Newtonsoft.Json反序列化JArray转JObject报错问题
问题:反序列化JSON时出现JArray与JObject类型不兼容错误
代码与错误表现
我从正常运行的.NET Core程序中复制了这段代码,且已验证jsonString是有效的JSON:
using Newtonsoft.Json; using Newtonsoft.Json.Linq; public static JObject StringToObject(string jsonString) { // 错误发生在此处 JObject o = JsonConvert.DeserializeObject<JObject>(jsonString); return o; }
执行反序列化时出现如下错误:
反序列化的JSON类型'Newtonsoft.Json.Linq.JArray'与预期类型'Newtonsoft.Json.Linq.JObject'不兼容
我一开始疑惑JArray的来源,以为所有内容都应该是JObject类型。
补充信息(编辑)
经提示后确认,jsonString是读取数据库后生成的JSON数组,具体内容如下:
[ { "code_seq": 1, "code_type": "ARM", "code_data": "Debt Collection" }, { "code_seq": 2, "code_type": "FFC", "code_data": "Focus Four Construction" }, { "code_seq": 3, "code_type": "UDD", "code_data":"UnDistracted Driving" }, { "code_seq": 4, "code_type": "LMS", "code_data": "LMS + Habit Builder" } ]
问题原因与修复方案
问题本质是:目标JSON字符串是数组格式(以[开头、]结尾),但代码错误地尝试将其反序列化为单个JObject,导致类型不兼容。
正确的处理方式是将其反序列化为JArray,修复后的代码如下:
JArray o = JsonConvert.DeserializeObject<JArray>(jsonString);
补充说明(编辑2)
此前问题被关闭,要求补充调试细节,现明确:
- 预期行为:将JSON字符串转换为对应对象
- 实际问题:JSON是数组结构,却被错误地尝试转为单个JObject
- 最简复现代码已在原帖提供,修复代码如上
感谢Alexander Petrov和Jon Skeet指出问题所在。
内容的提问来源于stack exchange,提问作者Velocedge
相关产品推荐
相关产品推荐

