You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core MVC反序列化多对象JSON数组报错解决方法

解决方案

报错核心原因是反序列化目标类型与接口返回的JSON结构不匹配:单对象接口返回JSON对象,可直接反序列化为ToDoStructure;全量列表接口返回JSON对象数组,必须反序列化为集合类型才能正常处理,具体修改如下:

1. 修改控制器代码

将反序列化目标类型从单个ToDoStructure改为List<ToDoStructure>集合,同时替换请求地址为全量todos接口,修改后代码如下:

using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using ToDo.Models;
using System.Net;
using System.Collections.Generic;

namespace ToDo.Controllers
{
    public class ToDoData : Controller
    {
        public ActionResult ToDoModel()
        {
            var webClient = new WebClient();
            webClient.Headers.Add(HttpRequestHeader.Cookie, "cookievalue");
            var json = webClient.DownloadString(@"https://jsonplaceholder.typicode.com/todos");
            List<ToDoStructure> ToDoList = JsonConvert.DeserializeObject<List<ToDoStructure>>(json);

            return View(ToDoList);
        }
    }
}

需手动引入System.Collections.Generic命名空间,否则无法识别List类型。

2. 修改Razor视图代码

首先将视图的模型声明改为集合类型,再通过循环遍历集合逐行渲染待办数据,同时修正原代码中数据单元格误用<th>标签的问题(数据单元格应使用<td>标签),修改后代码如下:

@model List<ToDo.Models.ToDoStructure>
@{
    ViewBag.Title = "ToDoModel";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>ToDoModel</h2>
<table>
    <tr>
        <th>userId</th>
        <th>id</th>
        <th>title</th>
        <th>completed</th>
    </tr>
    @foreach (var item in Model)
    {
        <tr>
            <td>@item.userId</td>
            <td>@item.id</td>
            <td>@item.title</td>
            <td>@item.completed</td>
        </tr>
    }
</table>

修改完成后重启项目,即可正常解析全量接口返回的JSON数组,所有待办数据会以表格形式逐行展示,不会再出现类型不匹配的反序列化报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:54:23