2016-02-05 85 views
1

我用于部首像GZIP响应请求:获取异常Newtonsoft.Json.JsonReaderException

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; 
    } 
+0

提供更多信息。什么是json,什么是类型参数T –

+0

如何构建您的请求,如果您共享代码,这将会很有帮助。 –

+0

我已更新我的问题@HariPrasad –

回答

2

你必须设置您的要求AutomaticDecompression财产。

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

更新:

可以包括以下线在CreateWebRequest方法。

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

您可以在创建请求的'CreateWebRequest'方法中添加此项.. –

+0

@DrukGohil我更新了答案以满足您的要求。 –

+0

感谢它的工作,但是,如何确认我获得Gzip响应? –