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

Http响应反序列化异常排查:本地正常但接口解析失败

问题原因与修复方案

你的核心错误是没有正确获取异步方法返回的JSON内容:
ReadAsStringAsync()是异步方法,返回的是Task<string>类型,你直接调用result.ToString()得到的不是接口返回的JSON字符串,而是Task对象的默认字符串表示(类似System.Threading.Tasks.Task1[System.String]),这就是反序列化时抛出Unexpected character encountered while parsing value: S`异常的原因——你在把Task对象的字符串形式当成JSON解析,而它的开头就是字母S。

修复代码

方式一:同步等待(适合无法改为异步的场景)

直接在ReadAsStringAsync()后调用.Result等待异步任务完成,拿到实际的JSON字符串:

HttpResponseMessage response = client.GetAsync(URL+pg.urlParameters).Result;  
if (response.IsSuccessStatusCode)
{
    var result = response.Content.ReadAsStringAsync().Result;
    var detailsList = Newtonsoft.Json.JsonConvert.DeserializeObject<Rootobject>(result);
}

方式二:异步await(推荐,符合.NET异步编程规范)

把当前方法改为异步方法,用await等待异步操作完成,避免阻塞线程:

// 注意方法声明要加上async,返回类型改为Task/Task<T>
public async Task ProcessResponse()
{
    HttpResponseMessage response = await client.GetAsync(URL+pg.urlParameters);  
    if (response.IsSuccessStatusCode)
    {
        var result = await response.Content.ReadAsStringAsync();
        var detailsList = Newtonsoft.Json.JsonConvert.DeserializeObject<Rootobject>(result);
    }
}

补充说明

你把JSON存本地后能正常反序列化,是因为存本地时你应该是正确获取到了真实的JSON内容(而非Task对象的字符串),所以本地文件里的内容是有效的JSON格式,自然能解析成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 04:39:26