2013-03-31 11 views
19

के साथ जेएसओएन फ़ाइल लौटें मैं एएसपी.नेट वेब एपीआई (परीक्षण के लिए) का उपयोग कर एक JSON फ़ाइल वापस करने की कोशिश कर रहा हूं।एएसपी.NET वेब एपीआई

public string[] Get() 
{ 
    string[] text = System.IO.File.ReadAllLines(@"c:\data.json"); 

    return text; 
} 

फ़िडलर में यह एक JSON प्रकार के रूप में प्रकट होता है लेकिन जब मैं क्रोम में डिबग और वस्तु के रूप में प्रकट होता है और अलग-अलग लाइनों (बाएं) की सरणी देखने। सही छवि यह है कि जब वस्तु का उपयोग कर रहा हूं तो ऑब्जेक्ट कैसा दिखना चाहिए।

क्या कोई मुझे बता सकता है कि मुझे सही प्रारूप में जेसन परिणाम प्राप्त करने के लिए क्या करना चाहिए?

alt http://i47.tinypic.com/fyd4ww.png

+0

http://stackoverflow.com/questions/9847564/how-do-i-get-asp-net-web-api-to-return-json-instead-of-xml-using-chrome। ।क्या मैं आपकी मदद कर सकता हूँ! – ssilas777

+0

@ ssilas777 मुझे नहीं लगता कि यह वही प्रश्न है। यह गलत JSON लौटने के विरोध में एक्सएमएल बनाम JSON लौटने के बारे में है। – Eilon

उत्तर

22

पहले से ही फ़ाइल करता है उस में मान्य JSON है? यदि ऐसा है, तो File.ReadAllLines पर कॉल करने के बजाय आपको File.ReadAllText पर कॉल करना चाहिए और इसे एक स्ट्रिंग के रूप में प्राप्त करना चाहिए। फिर आपको इसे JSON के रूप में पार्स करने की आवश्यकता है ताकि वेब एपीआई इसे फिर से क्रमबद्ध कर सके।

public object Get() 
{ 
    string allText = System.IO.File.ReadAllText(@"c:\data.json"); 

    object jsonObject = JsonConvert.DeserializeObject(allText); 
    return jsonObject; 
} 

हो जाएगा ताकि:

  1. एक स्ट्रिंग के रूप में फ़ाइल पढ़ें
  2. एक JSON ऑब्जेक्ट के रूप में यह पार्स एक CLR वस्तु में वेब एपीआई के लिए
  3. वापसी यह इतना है कि यह रूप में प्रारूपित किया जा सकता JSON (या एक्सएमएल, या जो कुछ भी)
16

मुझे एक और समाधान मिला जो किसी को भी रुचि रखने पर भी काम करता है।

public HttpResponseMessage Get() 
{ 
    var stream = new FileStream(@"c:\data.json", FileMode.Open); 

    var result = Request.CreateResponse(HttpStatusCode.OK); 
    result.Content = new StreamContent(stream); 
    result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); 

    return result; 
} 
+2

जेनेरिक HttpResponseMessage अब बहिष्कृत है क्योंकि यह टाइप सुरक्षित नहीं था .. http://stackoverflow.com/questions/10655350/returning-http-status-code-from-asp-net-mvc-4-web-api -controller – Markive

+4

+1: HttpResponseMessage को बहिष्कृत किया जा सकता है, लेकिन यह उस परिस्थिति में काम करता है जहां JSON संपत्ति के नाम वैध सीएलआर नहीं थे (उदाहरण में उनमें रिक्त स्थान थे)। आपके उत्तर ने मुझे जेएसओएन के रूप में जेनरेट किए गए कच्चे पाठ को वापस करने के लिए आवश्यक सुराग दिया। धन्यवाद –

2

मैं कुछ इसी तरह की जरूरत है, लेकिन IHttpActionResult (WebApi2) आवश्यक था।

public virtual IHttpActionResult Get() 
{ 
    var result = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.OK) 
    { 
     Content = new System.Net.Http.ByteArrayContent(System.IO.File.ReadAllBytes(@"c:\temp\some.json")) 
    }; 

    result.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"); 
    return ResponseMessage(result); 
} 
संबंधित मुद्दे