You need to enable JavaScript to run this app. ASP.NET MVC Razor页用foreach展示JSON时反序列化报错如何解决
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC Razor页用foreach展示JSON时反序列化报错如何解决

问题根因

报错的核心原因:newsapi.org的接口返回的是单个JSON对象,不是JSON数组,你尝试将单个对象反序列化为List<FetchedNews>集合类型,类型不匹配导致反序列化失败。


调整方案

1. 修改拉取新闻的方法

将返回类型从集合改为单个FetchedNews对象,同时修正异步调用逻辑避免同步阻塞:

public async Task<FetchedNews> FetchNews()
{
    FetchedNews newsFetched = null;
    using (var client = new HttpClient())
    {
        client.BaseAddress = new Uri("https://newsapi.org");
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        HttpResponseMessage response = await client.GetAsync("/v2/top-headlines?country=us&apiKey=fa9c19da02df465d8f7d6b0654248a24");
        if (response.IsSuccessStatusCode)
        {
            // 改为异步读取字符串,不要用Result阻塞线程
            var jsondata = await response.Content.ReadAsStringAsync();
            // 直接反序列化为单个FetchedNews对象,不要嵌套List
            newsFetched = JsonConvert.DeserializeObject<FetchedNews>(jsondata);
        }
        return newsFetched;
    }
}

2. 修改控制器代码

无需大幅调整,直接将拿到的单个对象传入视图即可:

[HttpGet]
[Route("news/fetch")]
public async Task<ActionResult> Fetch()
{
    var newsFetched = await news.FetchNews();
    return View(newsFetched);
}

3. 修改Razor视图代码

首先修改Model声明为单个FetchedNews类型,再遍历对象内的articles集合展示所有新闻内容:

@model Newspage.Data.Models.FetchedNews

@{ 
    ViewBag.Title = "Fetch";
}

<h2>Fetch</h2>
<p>接口状态:@Model.status | 总新闻条数:@Model.totalResults</p>

<table class="table">
    <tr>
        <th>新闻来源</th>
        <th>作者</th>
        <th>标题</th>
        <th>发布时间</th>
        <th>内容描述</th>
    </tr>

    @foreach (var article in Model.articles) {
    <tr>
        <td>@article.source.name</td>
        <td>@article.author</td>
        <td><a href="@article.url" target="_blank">@article.title</a></td>
        <td>@article.publishedAt.ToString("yyyy-MM-dd HH:mm")</td>
        <td>@article.description</td>
    </tr>
    }
</table>

内容的提问来源于stack exchange,提问作者Samke11

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 04:18:04