knt*_*nrg 4 subsonic t4 subsonic3
我得到的错误似乎来自Structs.tt文件.我正在使用Northwind数据库,只使用Products表(我排除了所有其他表).我返回Json(Product.All()).
这是错误:
序列化"SubSonic.Schema.DatabaseColumn"类型的对象时检测到循环引用.这是堆栈跟踪:
用户代码未处理System.InvalidOperationException消息="序列化'SubSonic.Schema.DatabaseColumn'类型的对象时检测到循环引用." Source ="System.Web.Extensions"StackTrace:位于System.Web.Script.Serialization.JavaScriptSerializer的System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(Object o,StringBuilder sb,Int32 depth,Hashtable objectsInUse,SerializationFormat serializationFormat). System.Web上的System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(Object o,StringBuilder sb,Int32 depth,Hashtable objectsInUse,SerializationFormat serializationFormat)中的SerializeValue(Object o,StringBuilder sb,Int32 depth,Hashtable objectsInUse,SerializationFormat serializationFormat). System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue中的Script.Serialization.JavaScriptSerializer.SerializeValueInternal(Object o,StringBuilder sb,Int32 depth,Hashtable objectsInUse,SerializationFormat serializationFormat)(Object o,StringBuilder sb,Int32 depth,Hashtable objectsInUse,SerializationFormat serializationFormat )在System.Web.Script.Serialization.JavaScriptSeri中 系统中的System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(Object o,StringBuilder sb,Int32 depth,Hashtable objectsInUse,SerializationFormat serializationFormat)中的alizer.SerializeCustomObject(Object o,StringBuilder sb,Int32 depth,Hashtable objectsInUse,SerializationFormat serializationFormat). System.Web.Script.Serialization.JavaScriptSerializer.SerializeEnumerable中的Web.Script.Serialization.JavaScriptSerializer.SerializeValue(Object o,StringBuilder sb,Int32 depth,Hashtable objectsInUse,SerializationFormat serializationFormat)(IEnumerable enumerable,StringBuilder sb,Int32 depth,Hashtable objectsInUse, SerializationFormat serializationFormat)在System.Web.Script.Serialization.JavaScriptSerializer.SerializeVialue的System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(Object o,StringBuilder sb,Int32 depth,Hashtable objectsInUse,SerializationFormat serializationFormat)中,对象o,StringBuilder sb, Int32深度,Hashtable 在System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(Object o,StringBuilder)中的System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(Object o,StringBuilder sb,Int32 depth,Hashtable objectsInUse,SerializationFormat serializationFormat)中的objectsInUse,SerializationFormat serializationFormat) System.Web.Script.Serialization.JavaScriptSerializer上的System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(Object o,StringBuilder sb,Int32 depth,Hashtable objectsInUse,SerializationFormat serializationFormat)中的sb,Int32 depth,Hashtable objectsInUse,SerializationFormat serializationFormat). System.Web上的System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(Object o,StringBuilder sb,Int32 depth,Hashtable objectsInUse,SerializationFormat serializationFormat)中的SerializeEnumerable(IEnumerable enumerable,StringBuilder sb,Int32 depth,Hashtable objectsInUse,SerializationFormat serializationFormat).离谱 System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(Object o,StringBuilder sb,Int32 depth,Hashtable objectsInUse,SerializationFormat serializationFormat)中的pt.Serialization.JavaScriptSerializer.SerializeValue(Object o,StringBuilder sb,Int32 depth,Hashtable objectsInUse,SerializationFormat serializationFormat) )在System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue的System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(Object o,StringBuilder sb,Int32 depth,Hashtable objectsInUse,SerializationFormat serializationFormat)中(Object o,StringBuilder sb,Int32 depth) ,系统中的System.Web.Script.Serialization.JavaScriptSerializer.Serialize(Object obj,SerializationFormat serializationFormat)中的System.Web.Script.Serialization.JavaScriptSerializer.Serialize(Object obj,StringBuilder输出,SerializationFormat serializationFormat)中的Hashtable objectsInUse,SerializationFormat serializationFormat) .Web.Script.Serialization.位于System.Web.Mvc.ControllerActionInvoker的System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext,ActionResult actionResult)的System.Web.Mvc.JsonResult.ExecuteResult(ControllerContext context)中的JavaScriptSerializer.Serialize(Object obj).<> c__DisplayClass11 System.Web.Mvc上的System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter过滤器,ResultExecutingContext preContext,Func1延续)中的.b__e(),System.Web.Mvc上的System.Web.Mvc.ControllerActionInvoker.<> c__DisplayClass11.<> c__DisplayClass13.b__10() System.Web.Mvc上System.Web.Mvc.Controller.ExecuteCore()的System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext,String actionName)中的.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext,IList1过滤器,ActionResult actionResult). System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContex)中的ControllerBase.Execute(RequestContext requestContext)在system.Web.Mvc.MvcHandler.ProcessRequest(HttpContext httpContext)的System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase httpContext)处的SystemConv处理系统.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的System.Web.Routing.UrlRoutingHandler.ProcessRequest(HttpContext httpContext)处.位于C:\ Applications\Spikes\ExtJSNorthwind\ExtJSNorthwind\Default.aspx.cs:第18行的ExtJSNorthwind._Default.Page_Load(Object sender,EventArgs e)中的.Routing.UrlRoutingHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext context) System.Web.UI.Control.OnLoad上的System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender,EventArgs e)中的System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp,Object o,Object t,EventArgs e)( EventArgs的 e)System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)的System.Web.UI.Control.LoadRecursive()处于InnerException状态:
run*_*ier 16
这很容易解决.您只需要将一个ScriptIgnore属性添加到ActiveRecord.tt文件中的几个方法.以下是我所做的更改.
[ScriptIgnore]
public IList<IColumn> Columns{
get{
return tbl.Columns;
}
}
Run Code Online (Sandbox Code Playgroud)
注意:我也将属性添加到以下方法中,但我不知道在您的情况下是否需要它
[ScriptIgnore]
public IQueryable<<#=fk.OtherClass #>> <#=propName #>
{
get
{
var repo=<#=Namespace #>.<#=fk.OtherClass#>.GetRepo();
return from items in repo.GetAll()
where items.<#=CleanUp(fk.OtherColumn)#> == _<#=CleanUp(fk.ThisColumn)#>
select items;
}
}
Run Code Online (Sandbox Code Playgroud)