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

Visual Studio 2022中Razor Pages项目JSON读取运行报错求助

Razor Pages 恐龙列表加载失败排查方案

1. 先核对Dinosaur模型类

  • 模型类必须是公共类(加public修饰符),所有要从JSON读取的属性都得有get和set访问器,示例:
    public class Dinosaur
    {
        public string Name { get; set; }
        public string Diet { get; set; }
        // 其他需要映射的属性...
    }
    
  • 确保模型属性名和JSON文件里的键大小写完全匹配,如果不想严格区分大小写,可以在反序列化时配置忽略大小写选项。

2. 检查JsonDinosaurService的核心问题

  • JSON文件配置:
    右键JSON文件→属性,把「复制到输出目录」改成「如果较新则复制」,否则程序运行时找不到文件。
  • 文件读取路径:
    读取文件时用相对路径,别写死绝对路径,示例:
    var filePath = Path.Combine(Directory.GetCurrentDirectory(), "dinosaurs.json");
    
  • 反序列化逻辑:
    若JSON键和模型属性大小写不一致,添加忽略大小写配置:
    var options = new JsonSerializerOptions { PropertyNameCaseInsensitive = true };
    var dinosaurs = JsonSerializer.Deserialize<List<Dinosaur>>(jsonContent, options);
    
    给GetAllDinosaurs()方法加断点,查看返回的列表是null还是空集合,以此判断文件读取或反序列化是否失败。

3. 确认服务注册是否到位

  • .NET 5及更早版本:在Startup.cs的ConfigureServices方法中添加服务注册:
    services.AddScoped<JsonDinosaurService>();
    
  • .NET 6+版本:在Program.cs中添加:
    builder.Services.AddScoped<JsonDinosaurService>();
    
    未注册服务会导致页面模型无法注入实例,直接引发报错。

4. 排查List页面的代码

  • 页面模型类(List.cshtml.cs):
    构造函数需正确注入服务,且OnGet()方法要调用服务获取数据并赋值:
    private readonly JsonDinosaurService _dinoService;
    public List<Dinosaur> Dinosaurs { get; set; }
    
    public ListModel(JsonDinosaurService dinoService)
    {
        _dinoService = dinoService;
    }
    
    public void OnGet()
    {
        Dinosaurs = _dinoService.GetAllDinosaurs();
    }
    
  • List.cshtml页面:
    开头的模型声明要与实际命名空间匹配,遍历数据前做空检查避免空引用报错:
    @page
    @model YourProjectNamespace.Pages.ListModel
    
    @if (Model.Dinosaurs != null && Model.Dinosaurs.Any())
    {
        foreach (var dino in Model.Dinosaurs)
        {
            <div>@dino.Name - @dino.Diet</div>
        }
    }
    else
    {
        <p>未找到恐龙数据</p>
    }
    

快速定位报错的小技巧

  • 打开Visual Studio的「输出」窗口,查看详细异常信息,反序列化错误会提示具体的键不匹配问题,空引用错误会指向出错的代码行。
  • 在关键逻辑处(如服务的GetAllDinosaurs()、页面的OnGet())添加断点,逐步调试跟踪数据流向。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:15:27