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

如何将JSON字符串中的数组正确反序列化为C#对象?

C# JSON反序列化空数组异常修正方案

核心错误原因

你当前代码存在两个导致异常/逻辑错误的问题:

  • LastName字段在返回的JSON结构中是字符串类型,代码中写的token.Value<bool>("LastName")存在类型不匹配问题,运行时会触发类型转换错误。
  • Links字段的反序列化逻辑错误:token.Value<Array>("Links")取到的是.NET基础Array类型,既不符合Newtonsoft.Json要求的JsonReader/JToken输入类型,也无法被序列化器正确识别,因此抛出类型转换异常,且该写法无法兼容空数组场景。

修正后可运行代码

首先确保你已经引入了对应依赖的命名空间:

using Newtonsoft.Json.Linq;
// 若使用System.Text.Json做反序列化,需额外引入
// using System.Text.Json;

解析逻辑修正如下,空数组场景会自动返回长度为0的对应泛型列表,不会触发异常:

var token = JObject.Parse(Json);
var Id = token.Value<string>("Id");
var fname = token.Value<string>("FirstName");
// 修正LastName的类型转换错误,原代码写的bool类型和JSON结构不匹配
var lbname = token.Value<string>("LastName");

// 推荐写法:直接用Newtonsoft内置的ToObject方法,代码最简洁,空数组/有数据场景均兼容
var links = token["Links"].ToObject<List<LinkService>>();

// 如果你必须使用System.Text.Json的JsonSerializer做反序列化,替换为下面这行即可
// var links = JsonSerializer.Deserialize<List<LinkService>>(token["Links"].ToString());

注意事项

  • 不要尝试将JToken下的JSON数组直接转换为.NET基础Array类型,通过JObject索引器token["Links"]取到的内容本身就是对应JSON数组的JArray实例,内置的ToObject<T>()方法已经兼容空数组、正常数组对象的所有转换场景。
  • 所有字段取值前要先和JSON结构核对类型,避免出现字符串转布尔这类基础类型不匹配的错误。

内容的提问来源于stack exchange,提问作者Georgia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 10:09:45