如何在C#中仅读取HTTP响应体中的特定points字段
提取JSON响应中的points字段值
你可以通过两种常用方式提取points字段的值,以下是修改后的代码:
方法一:使用System.Text.Json(.NET内置,无需额外安装包)
步骤1:定义对应JSON结构的实体类
public class UserPointsResponse { public int Points { get; set; } // 不需要其他字段的话,仅保留Points即可 }
步骤2:修改get_points方法
// 注意:异步方法需返回Task<int>而非int,否则编译报错 public async Task<int> get_points(string user) { // 最佳实践:HttpClient应全局复用,不建议每次调用都新建实例 using var client = new HttpClient(); var request = new HttpRequestMessage { Method = HttpMethod.Get, RequestUri = new Uri($"https://api.streamelements.com/kappa/v2/points/abcd/{user}"), Headers = { { "Accept", "application/json" }, { "Authorization", "Bearer 123" }, }, }; using var response = await client.SendAsync(request); response.EnsureSuccessStatusCode(); // 反序列化为实体类,直接获取Points属性 var userPoints = await response.Content.ReadFromJsonAsync<UserPointsResponse>(); return userPoints?.Points ?? 0; // 为空时返回默认值0 }
方法二:使用Newtonsoft.Json(需安装NuGet包Newtonsoft.Json)
如果不想定义实体类,可直接动态读取字段:
public async Task<int> get_points(string user) { using var client = new HttpClient(); var request = new HttpRequestMessage { Method = HttpMethod.Get, RequestUri = new Uri($"https://api.streamelements.com/kappa/v2/points/abcd/{user}"), Headers = { { "Accept", "application/json" }, { "Authorization", "Bearer 123" }, }, }; using var response = await client.SendAsync(request); response.EnsureSuccessStatusCode(); var body = await response.Content.ReadAsStringAsync(); dynamic jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject(body); return jsonObj.points ?? 0; }
额外注意事项
- 异步方法必须返回
Task<int>,原代码的async int写法不符合C#异步规范。 - 频繁创建HttpClient会导致Socket资源耗尽,建议全局单例复用该实例。
- 可按需添加异常捕获逻辑,比如处理请求失败的
HttpRequestException。
内容的提问来源于stack exchange,提问作者user19333311
相关产品推荐
相关产品推荐

