如何从RestAPI响应中仅提取Token字符串?
如何从API返回的JSON中提取仅包含Token的字符串?
现有获取Token的代码
// Prepare JSON content var content = new StringContent(jsonContent, Encoding.UTF8, "application/json"); HttpResponseMessage response = await client.PostAsync(tokenEndpoint, content); if (response.IsSuccessStatusCode) { string responseBody = await response.Content.ReadAsStringAsync(); Console.WriteLine("Token received: " + responseBody); return responseBody; } else { Console.WriteLine($"Failed to obtain access token (GetAccessToken). Status code: {response.StatusCode}"); return null; }
API返回的JSON示例
{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6ImFkbWluIiwibmJmIjoxNzE5MDI0ODM2LCJleHAiOjE3MTkwMjU0MzYsImlhdCI6MTcxOTAyNDgzNn0.USYqigcN_vGa5tfEaOW0u9RvPpWQIOLdyRb05Fc0RII","refreshToken":""}
尝试过的失败代码
//deserialize token var outObject = JsonConvert.DeserializeObject<dynamic>(responseBody); return outObject.access.token;
解决方法
方法1:修正dynamic反序列化的取值路径
你之前的错误在于JSON结构里没有access层级,直接通过顶级token字段就能获取目标值:
string responseBody = await response.Content.ReadAsStringAsync(); Console.WriteLine("Token received: " + responseBody); // 修正后的dynamic解析 var outObject = JsonConvert.DeserializeObject<dynamic>(responseBody); return outObject.token;
方法2:使用匿名类反序列化(类型更安全)
如果不想用dynamic,可以通过匿名类匹配JSON结构,避免字段名拼写错误:
string responseBody = await response.Content.ReadAsStringAsync(); Console.WriteLine("Token received: " + responseBody); var tokenResult = JsonConvert.DeserializeAnonymousType(responseBody, new { token = "", refreshToken = "" }); return tokenResult.token;
方法3:使用JObject直接解析(Newtonsoft.Json)
通过JObject直接定位字段,适合快速提取单个值:
string responseBody = await response.Content.ReadAsStringAsync(); Console.WriteLine("Token received: " + responseBody); var jObject = JObject.Parse(responseBody); return jObject["token"].ToString();
内容的提问来源于stack exchange,提问作者user2835586
相关产品推荐
相关产品推荐

