如何解决RestSharp响应解析错误并提取JSON中的campaignId
解决RestSharp响应中提取campaignId的问题
先帮你理清楚报错的核心原因:你调用client.Execute(GetIdreq)得到的GetIdres是RestResponse类型的对象,不是直接的JSON字符串,直接传给JObject.Parse肯定会报错——它需要的是纯JSON文本,不是整个响应对象。
接下来是修正后的实现方案,一步步帮你搞定:
关键修正点
- 从
RestResponse的Content属性获取实际的JSON响应字符串 - 注意GetResponse的这个API返回的是campaign数组(哪怕只匹配到一个结果,格式也是数组),所以要用
JArray.Parse而非JObject.Parse - 先判断响应是否成功,避免空内容或请求失败导致的解析错误
完整修正代码
static void addEmailToList(string ListName, string Email, string Name) { var client = new RestClient($"https://api.getresponse.com/v3/campaigns?query[name]={ListName}"); var GetIdreq = new RestRequest(Method.GET); GetIdreq.AddHeader("X-Auth-Token", "api-key 948df-my-key-7f3c6"); // 这里要注意:GET请求不需要添加RequestBody参数,我给你注释掉了,避免请求格式错误 // GetIdreq.AddParameter("application/json", ParameterType.RequestBody); var GetIdres = client.Execute(GetIdreq); // 先校验响应状态,再处理解析逻辑 if (GetIdres.IsSuccessful && !string.IsNullOrEmpty(GetIdres.Content)) { // 解析返回的JSON数组 var campaigns = JArray.Parse(GetIdres.Content); // 提取第一个匹配的campaignId(如果需要处理多个结果,可以遍历数组) if (campaigns.Count > 0) { string campaignId = campaigns[0]["campaignId"].ToString(); Console.WriteLine($"提取到的campaignId:{campaignId}"); // 这里可以继续编写后续添加邮箱到列表的业务逻辑 } else { Console.WriteLine("未找到匹配的campaign"); } } else { Console.WriteLine($"请求失败:{GetIdres.ErrorMessage},状态码:{GetIdres.StatusCode}"); } }
额外提示
如果你的业务场景中可能返回多个匹配的campaign,想要提取所有唯一的campaignId,可以遍历数组并去重,比如:
var uniqueCampaignIds = campaigns .Select(c => c["campaignId"].ToString()) .Distinct() .ToList();
内容的提问来源于stack exchange,提问作者Kevin himch
相关产品推荐
相关产品推荐

