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

如何从JSON字符串解析name变量?C#代码抛空引用异常求助

问题排查与解决

报错原因分析

你遇到的Object reference not set to an instance of an object空引用异常,主要是以下两种情况导致:

  • 变量json本身是空值、空字符串,或是没有正确传入目标JSON内容;
  • 若JObject.Parse(json)因JSON格式错误执行失败,会导致后续SelectToken("data")返回null,调用ToString()时触发异常。

另外你的代码写法存在冗余:不需要反复将JSON节点转成字符串再重新Parse,这既低效又容易引入错误。

正确实现代码

方式1:直接链式导航到目标节点

可以一步定位到name,无需多次Parse:

// 确保json变量已正确赋值为目标JSON字符串
JObject jsonObj = JObject.Parse(json);
// 直接通过路径访问数组第一个元素的name,空条件运算符避免空引用
string name = jsonObj.SelectToken("data.items[0].name")?.ToString();

方式2:分步验证节点存在性

如果需要逐节点确认是否存在,可采用这种写法:

JObject jsonObj = JObject.Parse(json);

JToken dataToken = jsonObj["data"];
if (dataToken != null)
{
    JToken itemsToken = dataToken["items"];
    if (itemsToken is JArray itemsArray && itemsArray.Count > 0)
    {
        string name = itemsArray[0]["name"]?.ToString();
        // 后续使用name变量
    }
}

方式3:强类型序列化(规范做法)

如果需要频繁处理这类JSON,定义实体类通过序列化解析会更易维护:

// 定义对应实体类
public class RootObject
{
    public DataModel Data { get; set; }
    public long AccountId { get; set; }
}

public class DataModel
{
    public List<ItemModel> Items { get; set; }
}

public class ItemModel
{
    public string Name { get; set; }
}

// 解析代码
RootObject root = JsonConvert.DeserializeObject<RootObject>(json);
string name = root?.Data?.Items?.FirstOrDefault()?.Name;

关键排查步骤

  1. 确认json变量内容:在JObject.Parse(json)前,打印或调试查看json的值,确保和目标JSON完全一致,无缺失或格式错误;
  2. 检查Newtonsoft.Json包:确保引用了正确版本的Json.NET包,版本过低可能存在兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 22:42:54