2011-08-15 15 views
7

में डबल कोट्स मेरे पास एक साधारण जेसन लौटने की कार्रवाई है। प्रदर्शन उद्देश्यों के लिए मैं नमूना कोड पेस्ट करूँगा। सरल वर्ग क्रमानुसार करने:लौटा जेसन

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

'" {\ "FullName \": \ "होमर सिम्पसन \"} "' भाग निकले संस्करण है स्ट्रिंग JSON ऑब्जेक्ट का। जब इसे पार्स किया जाता है, तो इंजन इसे '{"पूर्णनाम" में बदल देगा: "होम सिम्पसन"} '। चूंकि यह घुंघराले ब्रेसिज़ के बाहर उद्धरणों से घिरा हुआ है, आंतरिक उद्धरण बच जाना चाहिए या आपके पास एक अवैध स्ट्रिंग होगी। –

+0

मैं समझता हूं कि फ़िडलर को वापस लौटने वाली स्ट्रिंग को JSON ऑब्जेक्ट में पार्स नहीं करना चाहिए और JSON टैब में JSON दिखाएं? –

उत्तर

16

आप JSON में अपने आप को क्रमानुसार करने की जरूरत नहीं है, यह करना चाहिए:

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

आपका कोड प्रभावी रूप से यह दो बार serializes है, जो आप एक स्ट्रिंग परिणाम देता है।

वैध प्रतिक्रिया वास्तव में इस किया जाना चाहिए:

{"FullName":"Homer Simpson"} 

(आसपास के उद्धरण के बिना)

+0

अब यह समझ में आता है! धन्यवाद। होमर सिम्पसन लॉल के लिए –

+0

+1 –