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

如何将API响应的JSON数据反序列化为C#对象?

解决方案

1. 创建对应API返回JSON的实体类

根据返回的JSON结构,定义匹配的C#类,确保属性名和JSON字段大小写完全一致:

public class ApiResponse
{
    public int Period { get; set; }
    public string ReadTime { get; set; }
    public double AKM { get; set; }
    public int AKM_Status { get; set; }
    public double CozunmusOksijen { get; set; }
    public int CozunmusOksijen_Status { get; set; }
    public double Debi { get; set; }
    public int Debi_Status { get; set; }
    public double KOi { get; set; }
    public int KOi_Status { get; set; }
}

2. 修改sendData方法的泛型参数

把原方法中ResultStatus<object>替换为ResultStatus<ApiResponse>,让反序列化能识别具体类型:

public ResultStatus<ApiResponse> sendData(SendData data)
{
    var res = PostData<ApiResponse>(this.stationType.ToString() + "/SendData", JsonConvert.SerializeObject(data));
    return res;
}

3. 兼容API返回的非标准JSON(单引号)

API返回的JSON使用单引号而非标准双引号,需要在反序列化时配置兼容选项。修改PostData方法中的反序列化代码:

private ResultStatus<T> PostData<T>(string url, string data) where T : new()
{
    try
    {
        using (var webClient = new WebClient())
        {
            webClient.Encoding = Encoding.UTF8;
            webClient.Headers.Add("AToken", JsonConvert.SerializeObject(new AToken { TicketId = this.TicketId.ToString() }));

            var resp = webClient.UploadString(this.Url + url, data);
            
            // 添加兼容配置
            var jsonSettings = new JsonSerializerSettings
            {
                QuoteChar = '\'', // 允许解析单引号包裹的JSON
                DateFormatString = "yyyy-MM-dd HH:mm:ss" // 适配日期格式(注意原JSON中ReadTime格式存在错误,需确认API返回的正确格式)
            };
            
            return JsonConvert.DeserializeObject<ResultStatus<T>>(resp, jsonSettings);
        }
    }
    catch (Exception ex)
    {
        return new ResultStatus<T>
        {
            message = ex.Message + System.Environment.NewLine + url
        };
    }
}

4. 主代码中访问反序列化后的属性

现在可以直接访问res.objects的具体属性,而不是调用ToString():

var res = Services.sendData(data);
// 示例:输出具体属性值
MessageBox.Show($"周期:{res.objects.Period},AKM值:{res.objects.AKM}");

额外注意点

  • 原JSON中的ReadTime值格式错误(2022-08-22714:01:00),需确认API返回的正确日期格式,若格式固定,可调整DateFormatString参数适配。
  • 确保ResultStatus<T>类包含objects属性,结构参考如下(可根据实际API响应补充其他属性):
public class ResultStatus<T>
{
    public T objects { get; set; }
    public string message { get; set; }
    // 可添加status、code等其他响应属性
}

内容的提问来源于stack exchange,提问作者Mert Atmaca

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 12:09:19