我想在我的Windows窗体中包含HttpContext.Current.Request

时间:2017-02-25 07:15:11

标签: c#

var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();

using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{    
    string json= streamReader.ReadToEnd();
    List<DeSerialiseBL> myDeserializedObjList = (List<DeSerialiseBL>)Newtonsoft.Json.JsonConvert.DeserializeObject(Request[json], typeof(List<DeSerialiseBL>));
}

我想反序列化json值。所以我使用上面的代码。当我构建&#39;请求在当前上下文中不存在&#39;显示错误。

3 个答案:

答案 0 :(得分:1)

在您问题的代码中,您已成功反序列化从通过HttpWebRequest发出的网络请求中收到的JSON字符串。

说回复包含{ "foo" : "bar" },然后是变量json包含的值。

但是跟随它的表达式Request[json]没有任何意义。我可以向您保证,请求变量不包含名为{ "foo" : "bar" }的键,因此表达式Request[json]将返回一个空字符串。

您不应该在那里使用Request,而是直接传递json变量:

List<DeSerialiseBL> myDeserializedObjList = 
    (List<DeSerialiseBL>)Newtonsoft.Json.JsonConvert.DeserializeObject(json, typeof(List<DeSerialiseBL>));

代码可以进一步简化:

using Newtonsoft.Json; // At the top of your file

var myDeserializedObjList = JsonConvert.DeserializeObject<List<DeSerialiseBL>>(json);

所以你不需要HttpRequest.Current,因为json字符串与当前请求完全没有关系。

答案 1 :(得分:0)

首先你不能在win形式中使用HttpContext.Current。 winform没有在请求管道中运行..

DeserializeObject等待序列化字符串并输入..

    var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
    using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
    {    
         string json= streamReader.ReadToEnd();
         //List<DeSerialiseBL> myDeserializedObjList = (List<DeSerialiseBL>)Newtonsoft.Json.JsonConvert.DeserializeObject(Request[json], typeof(List<DeSerialiseBL>));
         List<DeSerialiseBL> myDeserializedObjList = (List<DeSerialiseBL>)Newtonsoft.Json.JsonConvert.DeserializeObject(json, typeof(List<DeSerialiseBL>));
    }

答案 2 :(得分:-1)

试试这个

 string Url = "Your Url";

    HttpClient client = new HttpClient();
    client.BaseAddress = new Uri(Url);
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    HttpResponseMessage response = client.GetAsync(Url).Result;
    if (response.IsSuccessStatusCode)
    {
        var JsonResult = response.Content.ReadAsStringAsync().Result;
        System.Web.Script.Serialization.JavaScriptSerializer tmp = new System.Web.Script.Serialization.JavaScriptSerializer();
        RemoteResult r = (RemoteResult)tmp.Deserialize(JsonResult, typeof(RemoteResult));
         // r.myDeserializedObjList is your desired output
    }

并为您想要的结果创建类。那是

public class RemoteResult
    {
        List<DeSerialiseBL> myDeserializedObjList;
    }