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

Asp.net Core Razor Pages:创建模型并JSON反序列化的问题求助

问题修复与正确实现方案

核心问题分析

你的代码存在4个关键错误:

  • 模型实例化语法错误:new ResponseModel = ... 不符合C#变量声明规则
  • 变量拼写错误:ResonseModel 应为正确的变量名
  • Session存储对象方式错误:Asp.Net Core的Session无法直接存储自定义对象,需先序列化为可存储的格式(如JSON字符串)
  • 文件路径可能存在问题:直接用文件名可能导致程序找不到文件

修正后的完整代码

1. 修正LoadJson方法(确保文件路径正确)

public string LoadJson()
{
    // 获取项目根目录下的JSON文件路径,避免相对路径问题
    string filePath = Path.Combine(Directory.GetCurrentDirectory(), "ResponseExample.json");
    using (StreamReader r = new StreamReader(filePath))
    {
        return r.ReadToEnd();
    }
}

2. 修正SetSessionRatingResponseData方法

// 需引用Newtonsoft.Json库
using Newtonsoft.Json;

public void SetSessionRatingResponseData()
{
    // 正确声明并实例化模型
    string jsonContent = LoadJson();
    ResponseModel responseModel = JsonConvert.DeserializeObject<ResponseModel>(jsonContent);

    // 将模型序列化为JSON字符串后存入Session
    string serializedModel = JsonConvert.SerializeObject(responseModel);
    HttpContext.Session.SetString(SessionConstants.Response, serializedModel);
}

从Session读取模型并在视图展示

在Razor Page后台代码(.cshtml.cs)中读取:

public ResponseModel ResponseData { get; set; }

public void OnGet()
{
    string serializedModel = HttpContext.Session.GetString(SessionConstants.Response);
    if (!string.IsNullOrEmpty(serializedModel))
    {
        ResponseData = JsonConvert.DeserializeObject<ResponseModel>(serializedModel);
    }
}

在Razor视图(.cshtml)中展示数据(根据你的ResponseModel结构调整):

@if (Model.ResponseData != null)
{
    <p>@Model.ResponseData.Title</p>
    <div>
        @foreach (var item in Model.ResponseData.Details)
        {
            <span>@item.Name: @item.Value</span>
        }
    </div>
}

额外注意事项

  • 必须在Program.cs中配置Session:
    var builder = WebApplication.CreateBuilder(args);
    builder.Services.AddSession(options =>
    {
        options.IdleTimeout = TimeSpan.FromMinutes(30);
        options.Cookie.HttpOnly = true;
        options.Cookie.IsEssential = true;
    });
    
    var app = builder.Build();
    app.UseSession(); // 需放在UseRouting之后、UseEndpoints之前
    
  • 确认ResponseModel的属性名称、类型与JSON文件完全匹配(默认大小写敏感,可通过配置忽略大小写)
  • 如果JSON文件不在项目根目录,需调整filePath的拼接逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:10:35