¿Cómo escribo Json sin codificar en mi View usando Razor?

Estoy intentando escribir un objeto como JSON en mi Asp.Net MVC View usando Razor, así:

 var potentialAttendees = @Json.Encode(Model.PotentialAttendees);  

El problema es que en el resultado el JSON está codificado, y a mi navegador no le gusta. Por ejemplo:

  var potentialAttendees = [{"Name":"Samuel Jack"},];  

¿Cómo hago que Razor emita JSON sin codificar?

Tú lo haces:

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

En versiones anteriores a Beta 2 lo hiciste como:

 @(new HtmlString(Json.Encode(Model.PotentialAttendees))) 

El JsonConvert.SerializeObject de JsonConvert.SerializeObject no se comporta de la misma manera que Json.Encode y hacer lo que @ david-k-egghead sugiere te abre a los ataques XSS .

Suelte este código en una vista Razor para ver que el uso de Json.Encode es seguro, y que Newtonsoft puede hacerse seguro en el contexto de JavaScript, pero no deja de tener un trabajo adicional.

 " } } )); alert('jsonEncodePotentialAttendees passed XSS test: ' + jsonEncodePotentialAttendees[0].Name);  " } }), addDoubleQuotes: true))); alert('safeNewtonsoftPotentialAttendees passed XSS test: ' + safeNewtonsoftPotentialAttendees[0].Name);  " } })); alert('unsafeNewtonsoftPotentialAttendees passed XSS test: ' + unsafeNewtonsoftPotentialAttendees[0].Name);  

Ver también:

  • ¿La salida de JsonConvert.SerializeObject necesita ser codificada en la vista Razor?
  • Reglas de prevención de XSS

Usando Newtonsoft