2013-03-31 172 views
19

我想使用ASP.NET Web API返回JSON文件(用於測試)。使用ASP.NET Web API返回JSON文件

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

    return text; 
} 

在此的Fiddler確實出現作爲JSON類型,但是當我在Chrome調試並查看它顯示爲對象和各條線(左)的陣列。正確的圖像是當我使用它時對象的外觀。

任何人都可以告訴我我應該返回什麼來實現正確格式的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我不認爲這是同一個問題。這是關於返回XML與JSON而不是返回不正確的JSON。 – Eilon

回答

22

是否該文件已經具有有效的JSON的呢?如果是這樣,而不是打電話File.ReadAllLines你應該打電話File.ReadAllText並得到它作爲一個單一的字符串。然後,您需要將其解析爲JSON,以便Web API可以重新序列化它。

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

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

這將:

  1. 閱讀文件作爲一個字符串
  2. 解析它作爲一個JSON對象轉換爲CLR對象
  3. 它返回的Web API,因此它可以被格式化爲JSON(或XML,或其他)
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的屬性名稱是無效的CLR的工作情況(例如,有位在其中)。你的回答給我提供了線索,我需要將生成的原始文本作爲JSON返回。謝謝 –

2

我需要類似的東西,但IHttpActionResultWebApi2)是必需的。

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); 
}