如何将HttpClient Post请求的JSON数组响应反序列化为自定义对象?
实现方案与方法分析
核心实现步骤
你的需求是将返回的[12345, 56789]这类double数组JSON,映射到自定义对象的两个字段,正确实现方式如下:
1. 定义自定义对象
先创建对应的数据类,用于存储解析后的价格:
public class PriceObject { public double FirstPrice { get; set; } public double SecondPrice { get; set; } }
2. 使用HttpClient发送Post请求并解析响应
直接将响应反序列化为double[]类型,再将数组元素赋值给自定义对象的字段即可,推荐用异步方式避免线程阻塞:
using System.Net.Http; using System.Text.Json; // 或Newtonsoft.Json,依项目引用选择 public async Task<PriceObject> GetAndParsePricesAsync() { var priceObj = new PriceObject(); using var httpClient = new HttpClient(); // 构造Post请求内容(需传参时使用) var requestContent = new StringContent("请求JSON内容", System.Text.Encoding.UTF8, "application/json"); var response = await httpClient.PostAsync("目标接口URL", requestContent); if (response.IsSuccessStatusCode) { // 将响应反序列化为double数组 var priceArray = await response.Content.ReadFromJsonAsync<double[]>(); // 赋值时需确保数组长度至少为2,避免索引越界 if (priceArray != null && priceArray.Length >= 2) { priceObj.FirstPrice = priceArray[0]; priceObj.SecondPrice = priceArray[1]; } } return priceObj; }
若项目使用Newtonsoft.Json,反序列化代码替换为:
var jsonStr = await response.Content.ReadAsStringAsync(); var priceArray = JsonConvert.DeserializeObject<double[]>(jsonStr);
对两种示例方法的分析
第一种示例:不适用
该示例是将JSON数组反序列化为自定义对象的集合(IEnumerable<DataObject>),但你的响应是double类型数组,并非对象数组,场景完全不匹配,不需要用foreach遍历,直接解析为double[]即可。
第二种示例:完全不适用
该示例用XmlSerializer处理XML格式响应,而你的接口返回的是JSON格式,两者毫无关联,这种方法对你的需求没有帮助,无需考虑。
内容的提问来源于stack exchange,提问作者delala
相关产品推荐
相关产品推荐

