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
相关产品推荐
相关产品推荐

