Estou tentando escrever um objeto como JSON no meu Asp.Net MVC View usando o Razor, assim:
<script type="text/javascript">
var potentialAttendees = @Json.Encode(Model.PotentialAttendees);
</script>
O problema é que, na saída, o JSON é codificado e meu navegador não gosta. Por exemplo:
<script type="text/javascript">
var potentialAttendees = [{"Name":"Samuel Jack"},];
</script>
Como faço para o Razor emitir JSON não codificado?
asp.net-mvc
json
razor
Samuel Jack
fonte
fonte
javascriptserializer
para isso, como@Html.Raw(javascriptSerializerObjecct.Serialize(myObject))
O Newtonsoft's
JsonConvert.SerializeObject
não se comporta da mesma maneiraJson.Encode
que o @ david-k-egghead sugere e abre os ataques XSS .Coloque esse código em uma visualização do Razor para ver se o uso
Json.Encode
é seguro e que a Newtonsoft pode ser protegida no contexto JavaScript, mas não sem trabalho extra.Veja também:
fonte
Json.Encode
existe há tanto tempo quanto me lembro, mas a desvantagem é que ele usa a implementação da Microsoft que gera datas fora do padrão (e pode fazer outras coisas incômodas). Eu uso e incentivo o uso do NewtonsoftJsonConvert.SerializeObject
combinado com o escape apropriado, porque ele tem uma saída melhor.Usando Newtonsoft
fonte
JsonSerializerSettings.StringEscapeHandling
para ativar a codificação. stackoverflow.com/a/50336590/6950124