C# 使用asp.net mvc使用stackexchange Api

C# 使用asp.net mvc使用stackexchange Api,c#,asp.net,asp.net-web-api,C#,Asp.net,Asp.net Web Api,我想在我的ASP.Net应用程序中使用StackExchange API 我制作了模型、控制器和视图,但它不工作。 它不断给我以下错误: 无法反序列化当前JSON对象(例如{“名称”:“值”}) 打字 'System.Collections.Generic.List'1[TaskTrial2.Models.question]' 因为该类型需要一个JSON数组(例如[1,2,3])来反序列化 没错 型号 public class question { public List<stri

我想在我的ASP.Net应用程序中使用StackExchange API

我制作了模型、控制器和视图,但它不工作。 它不断给我以下错误:

无法反序列化当前JSON对象(例如{“名称”:“值”}) 打字 'System.Collections.Generic.List'1[TaskTrial2.Models.question]' 因为该类型需要一个JSON数组(例如[1,2,3])来反序列化 没错

型号

public class question
{
    public List<string> tags { get; set; }
    public string link { get; set; }
    public owner owner { get; set; }
    public bool is_answered { get; set; }
    public long view_count { get; set; }
    public string last_activity_date { get; set; }
    public long score { get; set; }
    public long answer_count { get; set; }
    public string creation_date { get; set; }
    public string question_id { get; set; }
    public string title { get; set; }




}
public class owner {
    public string user_id { get; set; }
    public string reputation { get; set; }
    public string user_type  { get; set; }
    public string profile_image { get; set; }
    public string display_name { get; set; }
    public string link { get; set; }

}
公开课问题
{
公共列表标记{get;set;}
公共字符串链接{get;set;}
公共所有者{get;set;}
公共布尔是{get;set;}
公共长视图计数{get;set;}
公共字符串last_activity_date{get;set;}
公共长记分{get;set;}
公共长答案计数{get;set;}
公共字符串创建\u日期{get;set;}
公共字符串问题_id{get;set;}
公共字符串标题{get;set;}
}
公共类所有者{
公共字符串用户_id{get;set;}
公共字符串信誉{get;set;}
公共字符串用户类型{get;set;}
公共字符串配置文件\u图像{get;set;}
公共字符串显示\u名称{get;set;}
公共字符串链接{get;set;}
}
控制器

    public ActionResult Index()
    {

        List<question> questions = null;

        HttpClientHandler handler = new HttpClientHandler();
        handler.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
        using (var Client = new HttpClient(handler))
        {
            Client.BaseAddress = new Uri("https://api.stackexchange.com/");
            //HTTP GET
            Client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/jason"));
            var response = Client.GetAsync("2.2/questions?site=stackoverflow");
            response.Wait();
            var result = response.Result;

            if (result.IsSuccessStatusCode)
            {
                var readTask = result.Content.ReadAsAsync<List<question>>();
                readTask.Wait();
                questions = readTask.Result;


            }

        }

        return View(questions);
    }
public ActionResult Index()
{
列表问题=null;
HttpClientHandler handler=新的HttpClientHandler();
handler.AutomaticDecompression=DecompressionMethods.GZip | DecompressionMethods.Deflate;
使用(var客户端=新的HttpClient(处理程序))
{
Client.BaseAddress=新Uri(“https://api.stackexchange.com/");
//HTTP获取
Client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/jason”);
var response=Client.GetAsync(“2.2/questions?site=stackoverflow”);
response.Wait();
var result=response.result;
if(结果。IsSuccessStatusCode)
{
var readTask=result.Content.ReadAsAsync();
readTask.Wait();
问题=阅读任务。结果;
}
}
返回视图(问题);
}
查看

@model IEnumerable<TaskTrial2.Models.question>
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
   }


<table cellpadding="2" cellspacing="2" border="0">
<tr>

    <th>link</th>

</tr>

@foreach (var item in Model)
{

    <tr>
        <td>
            @item.link
        </td>

    </tr>

}
@model IEnumerable
@{
ViewBag.Title=“Index”;
Layout=“~/Views/Shared/_Layout.cshtml”;
}
链接
@foreach(模型中的var项目)
{
@item.link
}

当您的请求首先收到问题的包装时,您正试图直接序列化为问题列表

public class StackResponseWrapper
{
    public List<Question> items { get; set;}
    public bool has_more {get; set; }
    public int quota_max { get; set; }
    public int quota_remaining { get; set; }
}
公共类StackResponseWrapper
{
公共列表项{get;set;}
公共布尔还有{get;set;}
公共整数配额_max{get;set;}
公共整数配额_剩余{get;set;}
}
我没有研究响应的结构,但我猜这是一个分页包装器,它可以是通用的,例如(
StackResponseWrapper
),但我会让你调查一下


反序列化json时的关键是确保结构与您试图反序列化的内容相匹配

看起来您接收的json不是数组,而是对象错误表示您试图从不包含数组的json字符串加载数组。如果点击该URL,您将看到响应是一个具有
items
属性的对象,而不是一个数组响应被包装在一个对象中。查看此处:请发布从服务器获得的响应。访问以下url查看服务器的响应:谢谢。问题在于我的模型,我使用了您的解决方案+此链接来修复我的模型: