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

如何通过RestSharp从JSON响应获取contactId并解决空引用异常?

如何用RestSharp从JSON响应中提取contactId值?

嘿,我一眼就看出问题所在了:你一直在响应头(Headers)里找contactId,但这个值根本不在那儿!它其实在API返回的响应体JSON内容里,这就是为什么你会触发NullReferenceException——Find(x => x.Name == "contactId")返回了null,再调用Value.ToString()自然就报错了。

咱们来修正这个问题,有两种常用的方法,你可以选适合自己的:

方法1:用Newtonsoft.Json手动解析JSON响应体

首先确保你已经安装了Newtonsoft.Json NuGet包,然后修改你的代码:

using Newtonsoft.Json.Linq;

var client2 = new RestClient("https://api.getresponse.com/v3/contacts?query[email]=test@gmail.com");
var request2 = new RestRequest(Method.GET);
request2.AddHeader("X-Auth-Token", "api-key 948dff90-my-key-f3c6");

// 注意:GET请求不需要添加RequestBody参数,这行可以删掉
// request2.AddParameter("application/json", ParameterType.RequestBody);

var response2 = client2.Execute(request2);

// 先做安全检查:确保请求成功且响应内容不为空
if (response2.IsSuccessful && !string.IsNullOrEmpty(response2.Content))
{
    // GetResponse的这个API返回的是联系人数组,所以用JArray解析
    var contactsArray = JArray.Parse(response2.Content);
    
    if (contactsArray.Count > 0)
    {
        // 取第一个匹配联系人的contactId
        string contactId = contactsArray[0]["contactId"].ToString();
        // 这里就可以使用contactId啦
        Console.WriteLine($"找到的contactId是:{contactId}");
    }
    else
    {
        Console.WriteLine("没有找到匹配该邮箱的联系人");
    }
}
else
{
    Console.WriteLine($"请求失败:{response2.ErrorMessage ?? "未知错误"}");
}

方法2:用RestSharp内置序列化器做强类型解析

这种方式更类型安全,适合需要用到多个字段的场景:

首先定义一个对应API返回结构的类:

public class GetResponseContact
{
    public string contactId { get; set; }
    // 可以根据需求添加其他字段,比如email、name等
}

然后修改请求代码,直接反序列化响应:

var client2 = new RestClient("https://api.getresponse.com/v3/contacts?query[email]=test@gmail.com");
var request2 = new RestRequest(Method.GET);
request2.AddHeader("X-Auth-Token", "api-key 948dff90-my-key-f3c6");

// 直接把响应反序列化为联系人列表
var response2 = client2.Execute<List<GetResponseContact>>(request2);

if (response2.IsSuccessful && response2.Data != null && response2.Data.Count > 0)
{
    string contactId = response2.Data[0].contactId;
    Console.WriteLine($"找到的contactId是:{contactId}");
}
else
{
    Console.WriteLine($"请求失败或无匹配联系人:{response2.ErrorMessage ?? "无返回数据"}");
}

额外提醒

  • 你之前添加的request2.AddParameter("application/json", ParameterType.RequestBody);完全没必要,GET请求不需要请求体,删掉它可以避免潜在的请求格式问题。
  • 一定要先检查response2.IsSuccessful和响应内容是否为空,不然很容易再次遇到空引用异常哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:47:36