C# 分析ASP.NET MVC中的JSON值时出错?
我正在尝试使用StackOverflow的搜索API来搜索问题 我正在使用此操作执行解析:C# 分析ASP.NET MVC中的JSON值时出错?,c#,asp.net,asp.net-mvc,json,parsing,C#,Asp.net,Asp.net Mvc,Json,Parsing,我正在尝试使用StackOverflow的搜索API来搜索问题 我正在使用此操作执行解析: public ActionResult StackExchange(string sq) { string url = "http://api.stackoverflow.com/1.1/search?intitle=" + sq + "&order=desc"; var client = new WebClient(); var response = client
public ActionResult StackExchange(string sq)
{
string url = "http://api.stackoverflow.com/1.1/search?intitle=" + sq + "&order=desc";
var client = new WebClient();
var response = client.DownloadString(new Uri(url));
JObject o = JObject.Parse(response);// ERROR
int total = (int)o["total"];
return View(total);
}
以下是我试图解析的JSON url:
我试图提取以下数据:
`"total": 3` ,
`"question_timeline_url": "/questions/10868557/timeline",`
`"title": "Asp.net custom 404 not working using Intelligencia rewriter"`
其给定错误为:Newtonsoft.Json.JsonReaderException:分析值时遇到意外字符:。路径“”,第0行,位置0。
例外的原因是什么?我以前也用过同样的方法,效果很好
请提出建议。我的第一个猜测是,由于JsonReader在第0行给出了一个异常,位置0是编码有问题。因为上面的请求在chrome开发者工具中显示了以下内容类型头
Content-Type:application/json; charset=utf-8
您可以尝试通过WebClient将WebClient使用的编码设置为utf-8。尝试以下方法 使用NuGet并引用JSON.NET包。我看你已经这么做了 编写一个请求并获得响应
string url = "http://api.stackoverflow.com/1.1/search?intitle=test&order=desc";
var request = (HttpWebRequest) WebRequest.Create(url);
var response = request.GetResponse();
var json = ExtractJsonResponse(response);
从堆栈交换API收到的响应是gzip!在读取JSON响应之前,首先需要解压缩它。这就是您收到异常的原因
让我们创建一个方法来实现这一点。NET为此为我们提供了方便的GZipStream类型
private string ExtractJsonResponse(WebResponse response)
{
string json;
using (var outStream = new MemoryStream())
using (var zipStream = new GZipStream(response.GetResponseStream(),
CompressionMode.Decompress))
{
zipStream.CopyTo(outStream);
outStream.Seek(0, SeekOrigin.Begin);
using (var reader = new StreamReader(outStream, Encoding.UTF8))
{
json = reader.ReadToEnd();
}
}
return json;
}
现在可以从响应中提取JSON数据
string url = "http://api.stackoverflow.com/1.1/search?intitle=test&order=desc";
var request = (HttpWebRequest) WebRequest.Create(url);
var response = request.GetResponse();
var json = ExtractJsonResponse(response);
现在您可以解析返回的数据了
JObject o = JObject.Parse(json);
int total = (int)o["total"];
PS:我建议您使用今年早些时候发布的API 2.0版
谢谢..它工作得很好..也非常感谢您对API 2.0的建议--它太棒了:-)嗨,我尝试了这个url=但它显示了错误..GZip头中的神奇数字不正确。我知道这与json格式有关。但如何解决呢?