【发布时间】:2009-07-28 12:44:14
【问题描述】:
我得到的错误似乎来自 Structs.tt 文件。我正在使用 Northwind 数据库并且仅使用 Products 表(我排除了所有其他表)。我返回 Json(Product.All())。
这是错误:
检测到循环引用 在序列化类型对象时 'SubSonic.Schema.DatabaseColumn'。这里是 堆栈跟踪:
System.InvalidOperationException 是 用户代码未处理 Message="A 在检测到循环引用时 序列化一个类型的对象 'SubSonic.Schema.DatabaseColumn'。” 来源="系统.Web.Extensions" 堆栈跟踪:在 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(对象 o,StringBuilder sb,Int32 深度, 哈希表对象InUse, 序列化格式 序列化格式)在 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(对象 o,StringBuilder sb,Int32 深度, 哈希表对象InUse, 序列化格式 序列化格式)在 System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(对象 o,StringBuilder sb,Int32 深度, 哈希表对象InUse, 序列化格式 序列化格式)在 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(对象 o,StringBuilder sb,Int32 深度, 哈希表对象InUse, 序列化格式 序列化格式)在 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(对象 o,StringBuilder sb,Int32 深度, 哈希表对象InUse, 序列化格式 序列化格式)在 System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(对象 o,StringBuilder sb,Int32 深度, 哈希表对象InUse, 序列化格式 序列化格式)在 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(对象 o,StringBuilder sb,Int32 深度, 哈希表对象InUse, 序列化格式 序列化格式)在 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(对象 o,StringBuilder sb,Int32 深度, 哈希表对象InUse, 序列化格式 序列化格式)在 System.Web.Script.Serialization.JavaScriptSerializer.SerializeEnumerable(IEnumerable 可枚举,StringBuilder 某人,Int32 深度,Hashtable objectsInUse, 序列化格式 序列化格式)在 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(对象 o,StringBuilder sb,Int32 深度, 哈希表对象InUse, 序列化格式 序列化格式)在 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(对象 o,StringBuilder sb,Int32 深度, 哈希表对象InUse, 序列化格式 序列化格式)在 System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(对象 o,StringBuilder sb,Int32 深度, 哈希表对象InUse, 序列化格式 序列化格式)在 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(对象 o,StringBuilder sb,Int32 深度, 哈希表对象InUse, 序列化格式 序列化格式)在 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(对象 o,StringBuilder sb,Int32 深度, 哈希表对象InUse, 序列化格式 序列化格式)在 System.Web.Script.Serialization.JavaScriptSerializer.SerializeEnumerable(IEnumerable 可枚举,StringBuilder 某人,Int32 深度,Hashtable objectsInUse, 序列化格式 序列化格式)在 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(对象 o,StringBuilder sb,Int32 深度, 哈希表对象InUse, 序列化格式 序列化格式)在 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(对象 o,StringBuilder sb,Int32 深度, 哈希表对象InUse, 序列化格式 序列化格式)在 System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(对象 o,StringBuilder sb,Int32 深度, 哈希表对象InUse, 序列化格式 序列化格式)在 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(对象 o,StringBuilder sb,Int32 深度, 哈希表对象InUse, 序列化格式 序列化格式)在 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(对象 o,StringBuilder sb,Int32 深度, 哈希表对象InUse, 序列化格式 序列化格式)在 System.Web.Script.Serialization.JavaScriptSerializer.Serialize(对象 obj,StringBuilder 输出, 序列化格式 序列化格式)在 System.Web.Script.Serialization.JavaScriptSerializer.Serialize(对象 obj,序列化格式 序列化格式)在 System.Web.Script.Serialization.JavaScriptSerializer.Serialize(对象 obj) 在 System.Web.Mvc.JsonResult.ExecuteResult(ControllerContext 上下文)在 System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext 控制器上下文,动作结果 动作结果)在 System.Web.Mvc.ControllerActionInvoker.c__DisplayClass11.b__e() 在 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter 过滤器,ResultExecutingContext preContext,Func1 延续)在 System.Web.Mvc.ControllerActionInvoker.c__DisplayClass11.c__DisplayClass13.b__10() 在 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext 控制器上下文,IList1 过滤器, ActionResult actionResult) 在 System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext 控制器上下文,字符串动作名称) 在 System.Web.Mvc.Controller.ExecuteCore() 在 System.Web.Mvc.ControllerBase.Execute(RequestContext 请求上下文)在 System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext 请求上下文)在 System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase httpContext) 在 System.Web.Mvc.MvcHandler.ProcessRequest(HttpContext httpContext) 在 System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext httpContext) 在 System.Web.Mvc.MvcHttpHandler.VerifyAndProcessRequest(IHttpHandler httpHandler, HttpContextBase httpContext) 在 System.Web.Routing.UrlRoutingHandler.ProcessRequest(HttpContextBase httpContext) 在 System.Web.Routing.UrlRoutingHandler.ProcessRequest(HttpContext httpContext) 在 System.Web.Routing.UrlRoutingHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext 上下文)在 ExtJSNorthwind._Default.Page_Load(对象 发件人,EventArgs e) 在 C:\Applications\Spikes\ExtJSNorthwind\ExtJSNorthwind\Default.aspx.cs:line 18 点 System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, 对象 o, 对象 t, EventArgs e) 在 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(对象 发件人,EventArgs e) 在 System.Web.UI.Control.OnLoad(EventArgs 吃 System.Web.UI.Control.LoadRecursive() 在 System.Web.UI.Page.ProcessRequestMain(布尔值 includeStagesBeforeAsyncPoint,布尔值 包括StagesAfterAsyncPoint) 内部异常:
【问题讨论】:
-
这是异常消息:在序列化“SubSonic.Schema.DatabaseColumn”类型的对象时检测到循环引用。
-
不知道这是否有助于解决问题,但当我深入研究异常时,我遇到了这个问题:消息:“方法只能在 Type.IsGenericParameter 的类型上调用是真的。”全名:System.Web.Script.Serialization.JavaScriptSerializer
-
阅读该帖子的答案是选择要返回的特定字段。我的问题是我需要 ProductID,当代码到达 ActiveRecord.cs 中的 GetKeyColumn() 方法时,它会返回 ProductID。 ProductID 列的 Structs.cs 上的断点正在传递。
-
听起来和我的问题一样,我认为循环引用是因为我们有 IQueryable 外键引用,并且在序列化时卡在循环中?我将其更改为仅返回特定列并且它有效。