ASP.NET Core 6.0序列化Model遇自引用循环错误的解决咨询
解决ASP.NET Core 6.0中JS读取Model时的自引用循环问题
问题本质
你遇到的报错核心原因是误将包含循环引用的框架对象(比如PageContext、ActionDescriptor)传递给了前端,而非你定义的简易Model。即使配置了NewtonsoftJson忽略循环引用,这类框架对象的复杂内部结构仍会触发序列化问题。
具体解决方案
1. 确保仅传递自定义Model到前端
先确认你的自定义Model结构(示例为单个字段):
public class MySimpleModel { public string TargetField { get; set; } }
在PageModel中初始化并暴露这个业务Model:
public class IndexModel : PageModel { public MySimpleModel MyModel { get; set; } public void OnGet() { MyModel = new MySimpleModel { TargetField = "测试数据" }; } }
2. 直接在Razor视图中序列化自定义Model
在Razor页面里,用Html.Raw配合序列化工具,将自定义Model转为JS可识别的JSON:
方式一:使用ASP.NET Core内置Json序列化
<script> // 将自定义Model序列化为JS对象 const myModel = @Html.Raw(Json.Serialize(Model.MyModel)); // 读取目标字段 console.log(myModel.TargetField); </script>
方式二:使用NewtonsoftJson序列化(适配你已配置的场景)
<script> const myModel = @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject( Model.MyModel, new Newtonsoft.Json.JsonSerializerSettings { ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore } )); console.log(myModel.TargetField); </script>
3. 通过AJAX异步获取Model数据(适合动态加载场景)
如果需要异步加载数据,可在PageModel中添加Handler方法:
public IActionResult OnGetFetchModel() { var model = new MySimpleModel { TargetField = "异步加载数据" }; return Json(model); }
用jQuery发起AJAX请求:
<script src="https://code.jquery.com/jquery-3.6.4.min.js"></script> <script> $(function() { $.get("/Index?handler=FetchModel", function(data) { console.log(data.TargetField); }); }); </script>
4. 检查Program.cs的NewtonsoftJson配置(确保生效)
如果依赖NewtonsoftJson处理序列化,需确保在Program.cs中正确配置Razor Pages的序列化选项:
var builder = WebApplication.CreateBuilder(args); // 添加Razor Pages服务并配置NewtonsoftJson builder.Services.AddRazorPages() .AddNewtonsoftJson(options => { options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; }); var app = builder.Build(); // 其他中间件配置... app.MapRazorPages(); app.Run();
关键注意事项
- 绝对不要尝试序列化
PageContext、ActionDescriptor这类框架内部对象,它们包含大量循环引用的属性,完全不是你需要的业务数据。 - 始终只传递自定义业务Model到前端,这类结构简单,不会产生循环引用问题,也能减少不必要的数据传输。
内容的提问来源于stack exchange,提问作者Mark C
相关产品推荐
相关产品推荐

