2011-08-15 16 views
7

Mam akcję zwracającą proste json. Do celów demonstracyjnych wkleję przykładowy kod. Proste klasy do serializacji:Podwójne cytaty w zwracanym jsonie

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

działaniem która zwraca 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); 
} 

Oto gdzie jestem zdezorientowany. Kiedy wywołać tę akcję z przeglądarki i spojrzeć na odpowiedzi z Skrzypek, jest to wynik:

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\"}" 

Zakładka „JSON” w Fiddler czyta „Wybrana odpowiedź nie zawiera poprawny tekst JSON”. Poprawna odpowiedź powinna być tak:

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

Co tu się dzieje? Dzięki

+1

' "{\" FullName \ ": \" Homer Simpson \ "}"' jest wersja uciekł napisanego obiektu JSON. Kiedy zostanie przeanalizowany, silnik zmieni go w '{" FullName ":" Home Simpson "}'. Ponieważ jest on otoczony cudzysłowami poza nawiasami klamrowymi, wewnętrzne cudzysłowy muszą zostać zmienione lub będziesz mieć niepoprawny ciąg. –

+0

Rozumiem, ale czy skrzypek nie powinien przetworzyć zwróconego ciągu na obiekt JSON i pokazać JSON w zakładce JSON? –

Odpowiedz

16

Nie musisz do serializacji do JSON siebie, powinien to zrobić:

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

Kod skutecznie serializes go dwa razy, co daje wynik ciąg.

Poprawna odpowiedź powinna być w rzeczywistości to:

{"FullName":"Homer Simpson"} 

(bez otaczających cudzysłowów)

+0

Teraz ma to sens! Dzięki. –

+0

+1 dla Homera Simpsona lol –

Powiązane problemy