2012-10-10 59 views
29

Estoy convirtiendo un objeto a JSON usando JavaScriptSerializer y puedo ver esta salida JSON en el código del servidor:Convertir objeto de JSON en MVC 4

[{"UserId":1,"UserName":"Admin"}] 

Pero en la interfaz de usuario se está haciendo convertidos en algo parecido a continuación

[{"UserId":1,"UserName":"Admin"}]. 

Cómo escapar esos "?

Respuesta

21

¿Por qué estás haciendo eso? ¿Por qué no simplemente devuelve un JsonResult?

public ActionResult MyMethod() 
{ 
    List<ListItem> list = new List<ListItem>() { 
     new ListItem() { UserId = "1", UserName = "Admin" }, 
     new ListItem() { UserId = "2", UserName = "JohnDoe" }, 
     new ListItem() { UserId = "3", UserName = "JaneDoe" }}; 

    return this.Json(list); 
} 
+2

En cuanto a su última edición, ¿por qué es mejor especificar 'ActionResult' como tipo de retorno en lugar de' JsonResult'? –

+3

@YannickBlondeau - JsonResult * IS * un ActionResult. Prefiero que el tipo de retorno sea el más general que sea aceptable para reducir el acoplamiento. Por ejemplo, si decide cambiar el tipo de devolución a XML, puede hacerlo sin tener que cambiar también el tipo de devolución. Solo mi política personal. –

+0

Bien, gracias. Suena como un buen hábito. –

64

Si está utilizando el motor de vistas Razor es necesario utilizar el método Html.Raw:

<script type="text/javascript"> 
    var model = @Html.Raw(Json.Encode(Model)); 
</script> 

Nota la utilización del método Json.Encode que es más corto y equivalente a new JavaScriptSerializer().Serialize().

+1

+ infinito para explicar que las dos declaraciones son las mismas. –

0

Una cosa más en la respuesta de Darin Dimitrov. En mi VS2012 hay un error de compilación con el punto y coma, porque la declaración del lado JS es en realidad "var model =;". Una manera de evitar el uso de un par de cita para envolver la parte Razor así:

var model = "@Html.Raw(Json.Encode(Model))"; 

Esto no causará ningún error.

Json.Encode() parece ser una función de envoltura de JavaScriptSerializer. No estoy seguro si este último es más eficiente con el tiempo.