You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 14:36:19