【问题标题】:Getting exception Newtonsoft.Json.JsonReaderException获取异常 Newtonsoft.Json.JsonReaderException
【发布时间】:2016-02-05 06:30:16
【问题描述】:

我在 Header 中请求 gZip 响应,例如:

request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip");

在 webresponse 中我得到 ContentEncoding = gzip

我不知道如何用我的代码解压缩 gzip 响应,当我用 json 读取字符串时,我得到 Newtonsoft.Json.JsonReaderException

解决办法是什么?

using (WebResponse response = GetWebResponse(request))
        using (StreamReader reader = new StreamReader(response.GetResponseStream()))
        {
            var result = reader.ReadToEnd();
            return JsonConvert.DeserializeObject<T>(result);
        }

这就是我构造请求的方式:

var request = CreateWebRequest(new Uri(uri), type);

        // create request stream from arguments
        if (args != null)
        {
            string requestData = string.Empty;

            requestData = Newtonsoft.Json.JsonConvert.SerializeObject(args, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
            var data = Encoding.GetEncoding("UTF-8").GetBytes(requestData);
            request.ContentLength = data.Length;

            using (Stream stream = request.GetRequestStream())
            {
                stream.Write(data, 0, data.Length);                
            }                
        }

 protected WebRequest CreateWebRequest(Uri uri, MethodType type, bool IsUrlEncoded = false)
    {
        WebRequest request = WebRequest.Create(uri);

        (request as HttpWebRequest).Accept = "application/json";
        System.Net.ServicePointManager.Expect100Continue = false;
        if (IsUrlEncoded)
            request.ContentType = "application/x-www-form-urlencoded";
        else
            request.ContentType = "application / json";
            request.Headers.Add("X-Application", AppKeyData.Appkey);
        if (!string.IsNullOrEmpty(AppKeyData.SessionToken))
        {
            request.Headers.Add("X-Authentication", AppKeyData.SessionToken);
        }
        request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip");
        request.Method = type.ToString();

        return request;
    }

【问题讨论】:

  • 提供更多信息。 json是什么,类型参数是什么T
  • 你的请求是如何构造的,如果你把代码分享一下会很有帮助。
  • 我已经更新了我的问题@HariPrasad

标签: c# stream gzip


【解决方案1】:

您必须根据您的请求设置AutomaticDecompression 属性。

request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;

更新:

您可以在 CreateWebRequest 方法中包含以下行。

(request as HttpWebRequest).AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;

【讨论】:

  • 您可以在创建请求的CreateWebRequest 方法中添加它..
  • @DhruvGohil 我已经更新了答案以满足您的要求。
  • 谢谢它有效,但是,我如何确认我收到 Gzip 响应?
  • 很高兴它对您有用,如果它解决了您的问题,请将此标记为答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-11
  • 2013-03-01
  • 2019-05-15
  • 2018-08-14
  • 2012-12-21
  • 2019-10-13
相关资源
最近更新 更多