2011-08-15 72 views
7

Tengo una acción devolviendo un json simple. Para fines de demostración, pegaré el código de muestra. clase simple para serializar:comillas dobles en json devuelto

public class Employee 
{ 
    public string FullName { get; set; } 
} 

La acción que devuelve el JSON:

public JsonResult Test() 
{ 
    var employee = new Employee { FullName = "Homer Simpson" }; 
    var serializer = new JavaScriptSerializer(); 
    var json = serializer.Serialize(employee); 

    return Json(json, JsonRequestBehavior.AllowGet); 
} 

Aquí es donde estoy confundido. Cuando llamo a esta acción desde el navegador y miro la respuesta con la violinista, este es el resultado:

HTTP/1.1 200 OK 
Server: ASP.NET Development Server/10.0.0.0 
Date: Mon, 15 Aug 2011 20:52:34 GMT 
X-AspNet-Version: 4.0.30319 
X-AspNetMvc-Version: 3.0 
Cache-Control: private 
Content-Type: application/json; charset=utf-8 
Content-Length: 34 
Connection: Close 

"{\"FullName\":\"Homer Simpson\"}" 

La pestaña "JSON" en Fiddler lee "La respuesta seleccionada no contiene texto JSON válida". La respuesta válida debe ser como este:

"{"FullName":"Homer Simpson"}" 

¿Qué está pasando aquí? Gracias

+1

' "{\" Nombre completo \ ": \" Homer Simpson \ "}" 'es la versión escapado del objeto JSON de cuerda. Cuando se analiza, el motor la convertirá en '{" FullName ":" Home Simpson "}'. Debido a que está rodeado de comillas fuera de las llaves, las comillas internas deben ser escapadas o tendrá una cadena inválida. –

+0

Entiendo eso, pero ¿no debería fiddler analizar la cadena devuelta en el objeto JSON y mostrar el JSON en la pestaña JSON? –

Respuesta

16

No es necesario para serializar JSON en sí mismo, esto debería hacer:

public JsonResult Test() { 
    var employee = new Employee { FullName = "Homer Simpson" }; 
    return Json(employee, JsonRequestBehavior.AllowGet); 
} 

Su código serializa efectivamente dos veces, lo que le da una cadena resultado.

La respuesta válida en realidad debería ser la siguiente:

{"FullName":"Homer Simpson"} 

(sin las comillas rodean)

+0

¡Ahora esto tiene sentido! Gracias. –

+0

+1 para Homer Simpson lol –

Cuestiones relacionadas