如何在C# .NET中从API JSON响应提取并存储access_token
获取并存储Bearer Token的access_token值
要从API返回的JSON响应中提取access_token并存储到变量,核心是解析JSON响应,下面结合你现有的RestSharp代码,提供几种实用的实现方式:
1. 使用RestSharp自带的强类型反序列化(推荐)
RestSharp支持直接将POST请求的响应反序列化为自定义类,步骤简洁且类型安全:
第一步:定义映射JSON结构的类
创建一个和API返回字段一一对应的类:
public class TokenResponse { public string access_token { get; set; } public string token_type { get; set; } public int expires_in { get; set; } }
第二步:修改代码并提取token
var client = new RestClient("https://api"); var request = new RestRequest(); request.AddHeader("Content-Type", "application/x-www-form-urlencoded"); request.AddParameter("client_id", "X"); request.AddParameter("grant_type", "client_credentials"); request.AddParameter("client_secret", "X"); // 直接将响应反序列化为TokenResponse对象 var tokenResponse = client.Post<TokenResponse>(request); // 提取access_token到变量 string bearerToken = tokenResponse.access_token; // 验证结果 Console.WriteLine(bearerToken); // 输出:aisodjaisjd4123
2. 使用.NET内置的System.Text.Json解析
如果不想依赖RestSharp的序列化能力,可使用.NET自带的System.Text.Json库:
var client = new RestClient("https://api"); var request = new RestRequest(); request.AddHeader("Content-Type", "application/x-www-form-urlencoded"); request.AddParameter("client_id", "X"); request.AddParameter("grant_type", "client_credentials"); request.AddParameter("client_secret", "X"); var response = client.Post(request); // 反序列化响应内容 var tokenResponse = System.Text.Json.JsonSerializer.Deserialize<TokenResponse>(response.Content); // 存储access_token string bearerToken = tokenResponse.access_token; Console.WriteLine(bearerToken);
3. 使用Newtonsoft.Json(Json.NET)解析
如果项目已引入Newtonsoft.Json,可按以下方式实现:
注意:需先通过NuGet安装
Newtonsoft.Json包
var client = new RestClient("https://api"); var request = new RestRequest(); request.AddHeader("Content-Type", "application/x-www-form-urlencoded"); request.AddParameter("client_id", "X"); request.AddParameter("grant_type", "client_credentials"); request.AddParameter("client_secret", "X"); var response = client.Post(request); // 反序列化响应内容 var tokenResponse = Newtonsoft.Json.JsonConvert.DeserializeObject<TokenResponse>(response.Content); // 存储access_token string bearerToken = tokenResponse.access_token; Console.WriteLine(bearerToken);
注意事项
- 建议添加
response.Content的空值检查,避免反序列化时出现异常 - 强类型解析比动态解析更安全,优先使用自定义类映射的方式
- 若API返回字段名存在大小写差异,可通过特性(如
[JsonPropertyName])调整映射规则
内容的提问来源于stack exchange,提问作者jujy7
相关产品推荐
相关产品推荐

