gpt4 book ai didi

c# - 在 ASP.NET MVC 中全局应用 JSON 序列化程序设置

转载 作者:太空宇宙 更新时间:2023-11-03 14:50:08 25 4
gpt4 key购买 nike

Entity Framework Navigation 属性在我的 Kendo Grid 尝试序列化我的 查看模型。我们正在使用 Newtonsoft.JSON,所以我想在我的 Application_Start 中(全局)将 "ReferenceLoopHandling" 设置为 "Ignore" ()

奇怪的是,ASP.NET 似乎不遵守该设置...所以我仍然遇到异常。

...有什么想法吗?

版本:

  • 微软.AspNet.Mvc (5.2.3.0)
  • Microsoft.AspNet.WebApi (5.2.3)
  • Newtonsoft.Json (10.0.3)

示例应用_START:
移动到顶部底部 的调用不会改变结果...

protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);

RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
LoadSiteMap();

var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
}

示例 Razor 标记:
注意“绑定(bind)到”选项...

@(Html.Kendo().Grid<RTUDeviceControlRoomAlarm>()
.Columns(columns =>
{
columns.Bound(x => x.Id)
.Visible(false);
columns.Bound(x => x.RTUDeviceId)
.Visible(false);
columns.Bound(x => x.Register)
.Title("Register")
.Width(50);
columns.Bound(x => x.Description)
.Title("Description")
.Width(100);
columns.Bound(x => x.LowLowLimitOFF)
.Title("LL Limit/OFF")
.Width(50);
columns.Bound(x => x.LowLowLimitON)
.Title("LL Limit/ON")
.Width(50);
columns.Bound(x => x.HiLimit)
.Title("Hi Limit")
.Width(50);
columns.Bound(x => x.HiHiLimit)
.Title("HH Limit")
.Width(50);
columns.Command(command => { command.Edit(); command.Destroy(); }).Width(70);
})
.Name("gridControlRoomAlarms")
.ToolBar(toolbar => toolbar.Create())
.Editable(editable => editable.Mode(GridEditMode.InLine))
.Sortable()
.Scrollable()
.BindTo(Model.RTUDeviceControlRoomAlarms)
.DataSource(dataSource => dataSource.Ajax()
.PageSize(50)
.Model(model => { model.Id(m => m.Id); })
.Create(update => update.Action("Create", "ControlRoomAlarm", new { Area = "Documents" }))
.Update(update => update.Action("Update", "ControlRoomAlarm", new { Area = "Documents" }))
.Destroy(update => update.Action("Destroy", "ControlRoomAlarm", new { Area = "Documents" }))
)
.HtmlAttributes(new { @class = "", @style = "height: 400px;" }))

更新:
也试过...

  • GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;

最佳答案

尝试在您的 Application_Start() 中添加此配置作为最后一行:

json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.None;

参见 https://www.newtonsoft.com/json/help/html/PreserveObjectReferences.htm并注意代码中可能产生的副作用

关于c# - 在 ASP.NET MVC 中全局应用 JSON 序列化程序设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52100847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com