2013-01-25 12 views
5

L'helper Json.Encode() utilizza la classe JavaScriptSerializer per codificare una stringa in json?Json.Encode() utilizza la classe JavaScriptSerializer per serializzare

Ricevo un'eccezione di riferimento circolare quando si utilizza Json.Encode(Model) anche se le proprietà di classe che si stanno serializzando hanno l'attributo [ScriptIgnore].

La mia unica ipotesi è che forse l'helper Json.Encode() non utilizzi JavaScriptSerializer per serializzare su json ma non riesco a trovare la documentazione da nessuna parte su msdn.

@Html.Raw(Json.Encode(Model)) 

Ecco un esempio di uno dei modelli che ha una proprietà che non deve essere serializzato ...

using System.ComponentModel.DataAnnotations; 
using System.ComponentModel.DataAnnotations.Schema; 
using System.Web.Script.Serialization; 

namespace RobotDog.Entities { 
    public class Character { 
     [Key] 
     [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     public int Id { get; set; } 

     [MaxLength(200)] 
     public string Name { get; set; } 

     public virtual Person Person { get; set; } 

     [ScriptIgnore] 
     public virtual Movie Movie { get; set; } 
    } 
} 
+1

'Json.Encode' molto probabilmente usa il' System.Web.Mvc' spazio dei nomi diverso da 'System.Web.Script.Serialization.JavaScriptSerializer'. Cosa stai cercando di ottenere? – juanreyesv

+0

Nel mio controller interrogo il mio repository per ottenere un 'IEnumerable ' e quindi nella vista serializzo il modello perché sto usando KnockoutJS per l'interfaccia utente. – bflemi3

+0

Vorrei anche ricordare che le mie entità si trovano in un progetto di libreria di classi separato dal mio progetto web. – bflemi3

risposta

6

L'helper Json.Encode() usa la classe JavaScriptSerializer per codificare una stringa in json?

Sì.

Dal codice sorgente:

private static readonly JavaScriptSerializer _serializer = Json.CreateSerializer(); 

public static string Encode(object value) 
{ 
    DynamicJsonArray dynamicJsonArray = value as DynamicJsonArray; 
    if (dynamicJsonArray != null) 
    return Json._serializer.Serialize((object) (object[]) dynamicJsonArray); 
    else 
    return Json._serializer.Serialize(value); 
} 

dove JavaScriptSerializer è System.Web.Script.Serialization.JavaScriptSerializer

anche per aiutare il vostro problema vedere this thread

Problemi correlati