.NET(C#)如何将API响应的Results反序列化为自定义类型列表
解决方法
1. 创建API响应包装类
定义一个匹配API返回结构的类(仅需包含你需要的Results字段,其余字段会被反序列化器自动忽略):
public class SalesOrderApiResponse { public List<SalesOrder> Results { get; set; } }
2. 修改服务类的反序列化逻辑
在SalesOrderService的GetAllOrders方法中,先将API响应反序列化为包装类实例,再提取Results部分:
基于System.Text.Json的实现(.NET Core/.NET 5+ 默认)
public async Task<List<SalesOrder>> GetAllOrders() { // 假设已通过HttpClient获取到API响应字符串responseContent var apiResponse = JsonSerializer.Deserialize<SalesOrderApiResponse>(responseContent); // 空值保护,避免返回null return apiResponse?.Results ?? new List<SalesOrder>(); }
基于Newtonsoft.Json(Json.NET)的实现
public async Task<List<SalesOrder>> GetAllOrders() { // 假设responseContent是API返回的字符串 var apiResponse = JsonConvert.DeserializeObject<SalesOrderApiResponse>(responseContent); return apiResponse?.Results ?? new List<SalesOrder>(); }
3. 可选:无需包装类的直接解析方案
如果不想创建额外类,可以直接解析JSON节点:
Newtonsoft.Json 方式
public async Task<List<SalesOrder>> GetAllOrders() { var jObject = JObject.Parse(responseContent); var results = jObject["Results"].ToObject<List<SalesOrder>>(); return results ?? new List<SalesOrder>(); }
System.Text.Json 方式
public async Task<List<SalesOrder>> GetAllOrders() { using var jsonDoc = JsonDocument.Parse(responseContent); var resultsElement = jsonDoc.RootElement.GetProperty("Results"); return JsonSerializer.Deserialize<List<SalesOrder>>(resultsElement); }
内容的提问来源于stack exchange,提问作者Derek C
相关产品推荐
相关产品推荐

