JSON.Net的“自检示循环检测”exception
我有一些代码将List对象发送到我的View(ASP.Net MVC):
public ActionResult getRouteFromPart(int partId) { List routes = _routeService.GetRouteByPartType(partId); if (routes == null) { return this.AdvancedJsonResult(null, JsonRequestBehavior.AllowGet); } return this.AdvancedJsonResult(new { Routes = routes }, JsonRequestBehavior.AllowGet); }
但我在AdvancedJsonResult
类中遇到exception:
if (Data != null) { var settings = new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }; string result = JsonConvert.SerializeObject(this.Data, this.Formatting, settings); response.Write(result); }
我已经尝试了“ReferenceLoopHanding.Ignore”技巧,它使exception静音,但列表仍未传递给视图。
当我将routes
更改为单个对象而不是列表时,代码有效,所以我认为代码不喜欢使用列表。
我是这个项目的新手,所以我不知道如何解决这个问题,并对使用List感到高兴…
编辑:这是完整的exception消息,它发生在string result = JsonConvert...
line上。
使用类型’System.Data.Entity.DynamicProxies.PartNumber_B135A5D16403B760C3591872ED4C98A25643FD10B51246A690C2F2D977973452’检测到自引用循环。 路径’路由[0] .incomingLots [0] .partNumber.partType.partNumbers’。
错误消息的含义是有一个自引用循环。 当您请求某些实体时,您必须设置您不希望获取所有链接实体的数据库上下文。 可以通过在DbContext类构造函数中添加两行来禁用自引用循环,如下所示:
public YourDbContext() : base("name = YourDbContext") { //add these lines in order to avoid from "Self referencing loop detected for ..." error this.Configuration.LazyLoadingEnabled = false; this.Configuration.ProxyCreationEnabled = false; }
希望这可以帮助…
- 防止TFS添加临时文件
- 将属性添加到asp.net中的元素?
- ASP.net UserControl和AppDomain TypeResolve
- 编译器版本与.NET Framework版本 – ASP.NET应用程序的场景
- 访问WCF服务时出现FileLoadException
- 如何在ASP.NET上设置treeview的childnode postback false?
- 如何实现网页的实时数据
- 从对象类型System.Data.Spatial.DbGeography到已知的托管提供程序本机类型不存在映射
- IIS Request.UserHostAddress返回IPV6(:: 1),即使禁用IPV6也是如此