SubSonic 3.0.0.2 Des Structures.tt
L'erreur que je reçois semble sortir de leurs Structures.tt fichier. Je suis à l'aide de la base de données Northwind et uniquement à l'aide de la table Produits (j'exclus tous les autres tableaux). J'retour Json(Produit.Tous les()).
Voici l'erreur:
Une référence circulaire a été détecté
lors de la sérialisation d'un objet de type
'Subsonique.Schéma.DatabaseColumn'.Voici
la Trace de la Pile:Système.InvalidOperationException a été
non gérée par le code de l'utilisateur Message="Une
référence circulaire a été détectée pendant l'
la sérialisation d'un objet de type
'Subsonique.Schéma.DatabaseColumn'."
Source="Le Système De.Web.Les Extensions"
StackTrace:
Système.Web.Script.La sérialisation.JavaScriptSerializer.SerializeValueInternal(Objet
o, StringBuilder sb, Int32 profondeur,
Hashtable objectsInUse,
SerializationFormat
serializationFormat) à
Système.Web.Script.La sérialisation.JavaScriptSerializer.SerializeValue(Objet
o, StringBuilder sb, Int32 profondeur,
Hashtable objectsInUse,
SerializationFormat
serializationFormat) à
Système.Web.Script.La sérialisation.JavaScriptSerializer.SerializeCustomObject(Objet
o, StringBuilder sb, Int32 profondeur,
Hashtable objectsInUse,
SerializationFormat
serializationFormat) à
Système.Web.Script.La sérialisation.JavaScriptSerializer.SerializeValueInternal(Objet
o, StringBuilder sb, Int32 profondeur,
Hashtable objectsInUse,
SerializationFormat
serializationFormat) à
Système.Web.Script.La sérialisation.JavaScriptSerializer.SerializeValue(Objet
o, StringBuilder sb, Int32 profondeur,
Hashtable objectsInUse,
SerializationFormat
serializationFormat) à
Système.Web.Script.La sérialisation.JavaScriptSerializer.SerializeCustomObject(Objet
o, StringBuilder sb, Int32 profondeur,
Hashtable objectsInUse,
SerializationFormat
serializationFormat) à
Système.Web.Script.La sérialisation.JavaScriptSerializer.SerializeValueInternal(Objet
o, StringBuilder sb, Int32 profondeur,
Hashtable objectsInUse,
SerializationFormat
serializationFormat) à
Système.Web.Script.La sérialisation.JavaScriptSerializer.SerializeValue(Objet
o, StringBuilder sb, Int32 profondeur,
Hashtable objectsInUse,
SerializationFormat
serializationFormat) à
Système.Web.Script.La sérialisation.JavaScriptSerializer.SerializeEnumerable(IEnumerable
énumérable, StringBuilder sb, Int32
profondeur de la table de hachage objectsInUse,
SerializationFormat
serializationFormat) à
Système.Web.Script.La sérialisation.JavaScriptSerializer.SerializeValueInternal(Objet
o, StringBuilder sb, Int32 profondeur,
Hashtable objectsInUse,
SerializationFormat
serializationFormat) à
Système.Web.Script.La sérialisation.JavaScriptSerializer.SerializeValue(Objet
o, StringBuilder sb, Int32 profondeur,
Hashtable objectsInUse,
SerializationFormat
serializationFormat) à
Système.Web.Script.La sérialisation.JavaScriptSerializer.SerializeCustomObject(Objet
o, StringBuilder sb, Int32 profondeur,
Hashtable objectsInUse,
SerializationFormat
serializationFormat) à
Système.Web.Script.La sérialisation.JavaScriptSerializer.SerializeValueInternal(Objet
o, StringBuilder sb, Int32 profondeur,
Hashtable objectsInUse,
SerializationFormat
serializationFormat) à
Système.Web.Script.La sérialisation.JavaScriptSerializer.SerializeValue(Objet
o, StringBuilder sb, Int32 profondeur,
Hashtable objectsInUse,
SerializationFormat
serializationFormat) à
Système.Web.Script.La sérialisation.JavaScriptSerializer.SerializeEnumerable(IEnumerable
énumérable, StringBuilder sb, Int32
profondeur de la table de hachage objectsInUse,
SerializationFormat
serializationFormat) à
Système.Web.Script.La sérialisation.JavaScriptSerializer.SerializeValueInternal(Objet
o, StringBuilder sb, Int32 profondeur,
Hashtable objectsInUse,
SerializationFormat
serializationFormat) à
Système.Web.Script.La sérialisation.JavaScriptSerializer.SerializeValue(Objet
o, StringBuilder sb, Int32 profondeur,
Hashtable objectsInUse,
SerializationFormat
serializationFormat) à
Système.Web.Script.La sérialisation.JavaScriptSerializer.SerializeCustomObject(Objet
o, StringBuilder sb, Int32 profondeur,
Hashtable objectsInUse,
SerializationFormat
serializationFormat) à
Système.Web.Script.La sérialisation.JavaScriptSerializer.SerializeValueInternal(Objet
o, StringBuilder sb, Int32 profondeur,
Hashtable objectsInUse,
SerializationFormat
serializationFormat) à
Système.Web.Script.La sérialisation.JavaScriptSerializer.SerializeValue(Objet
o, StringBuilder sb, Int32 profondeur,
Hashtable objectsInUse,
SerializationFormat
serializationFormat) à
Système.Web.Script.La sérialisation.JavaScriptSerializer.Serialize(Objet
obj, StringBuilder de sortie,
SerializationFormat
serializationFormat) à
Système.Web.Script.La sérialisation.JavaScriptSerializer.Serialize(Objet
obj, SerializationFormat
serializationFormat) à
Système.Web.Script.La sérialisation.JavaScriptSerializer.Serialize(Objet
obj) à
Système.Web.Mvc.JsonResult.ExecuteResult(ControllerContext
contexte) à
Système.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext
controllerContext, ActionResult
actionResult) à
Système.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass11.b__e()
au
Système.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter
filtre, ResultExecutingContext
preContext, Func1 suite) au
Système.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass11.<>c__DisplayClass13.b__10()
au
Système.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext
controllerContext, IList1 filtres,
ActionResult actionResult) à
Système.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext
controllerContext, Chaîne actionName)
au
Système.Web.Mvc.Le contrôleur.ExecuteCore()
au
Système.Web.Mvc.ControllerBase.Execute(RequestContext
requestContext) à
Système.Web.Mvc.ControllerBase.Système.Web.Mvc.IController.Execute(RequestContext
requestContext) à
Système.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase
httpContext) à
Système.Web.Mvc.MvcHandler.ProcessRequest(HttpContext
httpContext) à
Système.Web.Mvc.MvcHandler.Système.Web.IHttpHandler.ProcessRequest(HttpContext
httpContext) à
Système.Web.Mvc.MvcHttpHandler.VerifyAndProcessRequest(IHttpHandler
httpHandler, HttpContextBase
httpContext) à
Système.Web.Le routage.UrlRoutingHandler.ProcessRequest(HttpContextBase
httpContext) à
Système.Web.Le routage.UrlRoutingHandler.ProcessRequest(HttpContext
httpContext) à
Système.Web.Le routage.UrlRoutingHandler.Système.Web.IHttpHandler.ProcessRequest(HttpContext
contexte) à
ExtJSNorthwind._Default.Page_Load(Object
sender, EventArgs e) dans
C:\Applications\Pointes\ExtJSNorthwind\ExtJSNorthwind\Par Défaut.aspx.cs:ligne
18 à
Système.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr
fp, l'Objet o, t Objet, EventArgs e)
au
Système.Web.Util.CalliEventHandlerDelegateProxy.Rappel(Objet
sender, EventArgs e) à
Système.Web.L'INTERFACE utilisateur.De contrôle.OnLoad(EventArgs
e) à
Système.Web.L'INTERFACE utilisateur.De contrôle.LoadRecursive()
au
Système.Web.L'INTERFACE utilisateur.Page.ProcessRequestMain(Boolean
includeStagesBeforeAsyncPoint, Boolean
includeStagesAfterAsyncPoint)
InnerException:
Ne sais pas si cela va aider à résoudre le problème, mais comme je l'ai creusé plus profondément dans l'exception que j'ai rencontré ce: Message: "Méthode ne peut être appelée que sur un Type pour le Type.IsGenericParameter est vrai." FullName: Système.Web.Script.La sérialisation.JavaScriptSerializer
Cela semble très similaire à stackoverflow.com/questions/1153385/...
La lecture de ce post, la réponse a été de sélectionner des zones spécifiques pour le retour. Mon problème est que j'ai besoin de la référence du produit et le code ne fonctionne pas lorsqu'il atteint la GetKeyColumn() la méthode de ActiveRecord.cs où elle retourne la référence du produit. Les points d'arrêt sur les Structures.cs de la colonne ProductID sont de passage.
Le même son que mon problème j'ai supposé que la circulaire de référence était le fait que nous avons IQueryable clé étrangère références et il a été coincé dans une boucle lors de la sérialisation? Je l'ai changé pour renvoyer uniquement les colonnes spécifiques et cela a fonctionné.
OriginalL'auteur kntcnrg | 2009-07-28
Vous devez vous connecter pour publier un commentaire.
Semble que nous avons un problème avec la Sérialisation :). Pouvez-vous s'il vous plaît ajouter cette Question sur notre liste? J'ai vraiment l'apprécier.
Découvrez le correctif que j'ai posté ci-dessous. GitHub est aussi lent que la boue ou je l'ai posté il y a trop.
OriginalL'auteur
C'est assez facile à corriger. Vous devez juste ajouter un ScriptIgnore attribut à un couple de méthodes de l'ActiveRecord.tt fichier. Voici les modifications que j'ai effectuées.
Note: j'ai également ajouté l'attribut à la méthode suivante mais je ne sais pas si c'est nécessaire dans votre situation
Merci! Bien que j'espère qu'il y a une meilleure solution, c'est un super temporaire corrigé.
Je pense que la "meilleure" solution est probablement d'utiliser un DTO ou un autre objet à sérialiser. Dans mon cas, j'ai 3 propriétés et j'ai juste besoin de [ScriptIgnore] celui qui se réfère à la maison mère... donc c'est une solution parfaitement raisonnable pour moi
Bret Ferrier : où placer le bon emplacement pour [ScriptIgnore]
OriginalL'auteur runxc1 Bret Ferrier