web-dev-qa-db-fra.com

Convertir un objet en JSON dans MVC 4

Je convertis un objet en JSON avec JavaScriptSerializer et je peux voir cette sortie JSON dans le code serveur:

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

Mais dans l'interface utilisateur, il se convertit à quelque chose comme ci-dessous

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

Comment échapper à ces "?

30
user1735105

Si vous utilisez le moteur de vue Razor, vous devez utiliser la méthode Html.Raw:

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

Notez l'utilisation de la méthode Json.Encode qui est plus courte et équivalente à new JavaScriptSerializer().Serialize().

69
Darin Dimitrov

Pourquoi faites-vous cela? Pourquoi ne pas simplement retourner 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);
}
22
Erik Funkenbusch

Juste une dernière chose sur la réponse de Darin Dimitrov. Dans mon VS2012, il y a une erreur de compilation avec le point-virgule, car l'instruction du côté JS est en fait "var model =;" . Un moyen d'utiliser une paire de guillemets pour envelopper la partie Razor comme ceci:

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

Cela ne causera aucune erreur.

Json.Encode () semble être une fonction wrapper de JavaScriptSerializer. Je ne sais pas si ce dernier est plus efficace.

0
Fenwick