2013-03-31 11 views
19

Sto tentando di restituire un file JSON utilizzando l'API Web ASP.NET (per il test).Restituisce il file JSON con l'API Web ASP.NET

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

    return text; 
} 

In Fiddler ciò appare come un tipo JSON ma quando il debug in Chrome e visualizzare l'oggetto appare come e serie di linee individuali (sinistra). L'immagine giusta è come dovrebbe apparire l'oggetto quando lo sto usando.

Qualcuno può dirmi cosa dovrei tornare per ottenere un risultato JSON nel formato corretto?

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. .Può aiutarti! – ssilas777

+0

@ ssilas777 Non penso che sia la stessa domanda. Si tratta di restituire XML vs JSON invece di restituire JSON errato. – Eilon

risposta

22

Fa il file ha già valida JSON in esso? In tal caso, invece di chiamare File.ReadAllLines devi chiamare File.ReadAllText e prenderlo come una singola stringa. Quindi è necessario analizzarlo come JSON in modo che l'API Web possa ricalicalizzarlo.

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

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

Questa volontà:

  1. leggere il file come una stringa
  2. analizzare come un oggetto JSON in un oggetto CLR
  3. restituirlo al Web API in modo che possa essere formattato come JSON (o XML, o qualsiasi altra cosa)
16

Ho trovato un'altra soluzione che funziona anche se qualcuno fosse interessato.

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

Il HttpResponseMessage generico ora è deprecato in quanto non era sicuro tipo .. http://stackoverflow.com/questions/10655350/returning-http-status-code-from-asp-net-mvc-4-web-api -controller – Markive

+4

+1: HttpResponseMessage può essere deprecato, ma ha funzionato nella situazione in cui i nomi delle proprietà JSON non erano CLR validi (ad es. avevano spazi in essi). La tua risposta mi ha dato l'indizio di cui avevo bisogno per restituire il testo grezzo generato come JSON. Grazie –

2

avevo bisogno di qualcosa di simile, ma IHttpActionResult (WebApi2) è stato richiesto.

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