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;显示错误。
答案 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;
}