C# 分析ASP.NET MVC中的JSON值时出错?

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

我正在尝试使用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.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格式有关。但如何解决呢?