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

C#反序列化JSON API的HttpWebResponse时遇序列化异常

问题分析与解决方案

嘿,Milo,我一眼就揪出问题所在啦!你虽然拿到了201的成功状态码,但你错误地用JSON序列化器去解析了非JSON格式的响应内容——API返回的是Base64编码的PDF文档,不是你预期的JSON数据,这才导致了那个“Unexpected char '.'”的序列化异常。

具体原因

你用Mozilla REST客户端测试时能看到正确响应,是因为客户端能识别出这是Base64编码的PDF并正确处理,但你的代码里却用DataContractJsonSerializer尝试反序列化,而这个序列化器只能处理JSON结构的数据,遇到PDF Base64里的特殊字符(比如点号)自然就报错了。

解决步骤

  1. 先确认响应类型:你可以先打印下响应的Content-Type,验证这个判断:

    Console.WriteLine(httpResponse.ContentType);
    

    输出应该是类似application/pdf或者text/plain(如果API用Base64明文返回的话),绝对不是application/json。

  2. 修改响应读取逻辑:既然返回的是Base64编码的PDF,那我们直接解码保存成文件即可,不需要用到你的GLSParcelClass(这个类是用来接收JSON格式响应的,这次用不上)。修改后的读取代码如下:

    HttpWebResponse httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
    using (StreamReader loStream = new StreamReader(httpResponse.GetResponseStream()))
    {
        // 读取Base64格式的PDF字符串
        string base64PdfContent = loStream.ReadToEnd();
        try
        {
            // 将Base64解码为字节数组
            byte[] pdfBytes = Convert.FromBase64String(base64PdfContent);
            // 保存为本地PDF文件
            File.WriteAllBytes("GLS_Shipping_Label.pdf", pdfBytes);
            Console.WriteLine("PDF标签已成功保存!");
        }
        catch (FormatException ex)
        {
            // 处理Base64解码失败的情况
            Console.WriteLine("Base64解码出错:" + ex.Message);
        }
    }
    
  3. 额外提示:建议你再仔细看下GLS API的文档,确认哪些接口返回JSON,哪些返回PDF文件。如果后续有接口确实返回JSON数据,那你的GLSParcelClass和DataContractJsonSerializer的用法是没问题的,但这次的场景显然不属于这种情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:45:08