2011-08-15 58 views
7

我有一個操作返回一個簡單的json。爲了演示目的,我將粘貼示例代碼。簡單的類連載:返回json中的雙引號

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

返回的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); 
} 

這裏就是我很困惑。當我打電話從瀏覽器這一行動,並期待在與小提琴手的反應,這就是結果:

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

在提琴手的「JSON」選項卡上寫着「選定的響應不包含有效的JSON文本」。 有效的響應應該是這樣的:

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

這到底是怎麼回事? 感謝

+1

' 「{\」 全名\ 「:\」 辛普森\ 「}」'是轉義版本的絃樂JSON對象。當它被解析時,引擎將把它變成'{「FullName」:「Home Simpson」}'。因爲它被大括號外的引號包圍,所以內部引號必須被轉義或者您將有一個無效的字符串。 –

+0

我明白,但不應該提琴手解析返回的字符串到JSON對象,並在JSON選項卡中顯示JSON? –

回答

16

你不需要序列化爲JSON自己,這應該這樣做:

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

您的代碼有效地序列兩次,它給你一個字符串結果。

的有效響應實際上應該是這樣的:

{"FullName":"Homer Simpson"} 

(周圍無引號)

+0

現在這是有道理的!謝謝。 –

+0

霍默辛普森+1 –