2011-08-15 15 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"}" 

何?あなたはJSONに自分自身をシリアル化する必要はありません おかげ

+1

' "{\" フルネーム\ ":\" ホーマーシンプソン\は "}"'エスケープバージョンでありますストリングされたJSONオブジェクトのそれが解析されると、エンジンは '{" FullName ":" Home Simpson "}'に変換します。中括弧の外側に引用符で囲まれているため、内部引用符をエスケープするか、無効な文字列を使用する必要があります。 –

+0

返された文字列をJSONオブジェクトに解析してJSONタブにJSONを表示することはできませんが、それを理解することはできますか? –

答えて

16

が、これは実行する必要があります。

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

あなたのコードが効果的に二回、それをシリアル化し、あなたの文字列の結果を与えます。

有効な応答が実際にこのようになります(周囲の引用符なし)

{"FullName":"Homer Simpson"} 

+0

これは理にかなっています!ありがとう。 –

+0

+1ホーマーシンプソン笑 –

関連する問題