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

调用Baselinker API时遭遇Newtonsoft.Json解析错误求助

问题解决:Baselinker API调用Json解析错误

错误根源

你碰到的Newtonsoft.Json.JsonReaderException,核心问题是直接把HttpResponseMessage对象转成了字符串,而没有读取响应的实际内容体。Convert.ToString(response)得到的是响应对象的描述文本(比如开头是"StatusCode..."),根本不是API返回的Json数据,自然会被Json解析器判定为非法格式。

修正后的代码

private async void Button_Clicked(object sender, EventArgs e)
{
    using (var httpClient = new HttpClient())
    {
        using (var request = new HttpRequestMessage(new HttpMethod("POST"), "https://api.baselinker.com/connector.php"))
        {
            request.Headers.TryAddWithoutValidation("X-BLToken", "AAA-BBB-CCC");

            request.Content = new StringContent("method=getOrders&parameters=%7B%22date_from%22%3A+1407341754%7D");
            request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/x-www-form-urlencoded");

            var response = await httpClient.SendAsync(request);
            // 先验证请求是否成功,再读取响应内容
            response.EnsureSuccessStatusCode();
            var responseContent = await response.Content.ReadAsStringAsync();
            var oMycustomclassname = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(responseContent);
            labelek.Text = oMycustomclassname.ToString();
        }
    }
}

关键修正点

  • 用await response.Content.ReadAsStringAsync()替代Convert.ToString(response),这才是获取API返回的Json内容的正确方式。
  • 新增response.EnsureSuccessStatusCode(),用于提前捕获请求层面的错误(比如4xx/5xx状态码)。
  • 给oMycustomclassname调用ToString(),避免直接将dynamic对象赋值给Text属性可能出现的显示异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 10:37:05