Estoy tratando de escribir un objeto como JSON en mi Asp.Net MVC View usando Razor, así:
<script type="text/javascript">
var potentialAttendees = @Json.Encode(Model.PotentialAttendees);
</script>
El problema es que en la salida el JSON está codificado y a mi navegador no le gusta. Por ejemplo:
<script type="text/javascript">
var potentialAttendees = [{"Name":"Samuel Jack"},];
</script>
¿Cómo consigo que Razor emita JSON sin codificar?
asp.net-mvc
json
razor
Samuel Jack
fuente
fuente
javascriptserializer
para eso@Html.Raw(javascriptSerializerObjecct.Serialize(myObject))
Newtonsoft
JsonConvert.SerializeObject
no se comporta igualJson.Encode
y hacer lo que sugiere @ david-k-egghead te abre a ataques XSS .Coloque este código en una vista de Razor para ver que el uso
Json.Encode
es seguro y que Newtonsoft se puede hacer seguro en el contexto de JavaScript, pero no sin algún trabajo adicional.Ver también:
fuente
Json.Encode
ha existido desde que tengo memoria, pero la desventaja es que usa la implementación de Microsoft que genera fechas no estándar (y puede hacer otras cosas molestas). Uso y aliento el uso de NewtonsoftJsonConvert.SerializeObject
combinado con un escape adecuado porque tiene una mejor salida.Usando Newtonsoft
fuente
JsonSerializerSettings.StringEscapeHandling
para habilitar la codificación. stackoverflow.com/a/50336590/6950124