2013-03-31 13 views
19

Próbuję zwrócić plik JSON przy użyciu interfejsu API sieci Web ASP.NET (do testowania).Powróć plik JSON z ASP.NET Web API

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

    return text; 
} 

W Fiddler ten wydaje się jako typ Json ale kiedy debugowania w Chrome i obejrzeć obiekt, który pojawia się, jak i szereg pojedynczych linii (w lewo). Odpowiedni obraz to wygląd obiektu, gdy go używam.

Czy ktoś może mi powiedzieć, co powinienem zwrócić, aby uzyskać wynik JSONA w poprawnym formacie?

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. . Pomóżcie! – ssilas777

+0

@ ssilas777 Nie sądzę, że to to samo pytanie. Dotyczy to zwracania XML vs. JSON, a nie zwracania niepoprawnego JSON. – Eilon

Odpowiedz

22

Czy plik ma już ważny JSON w nim? Jeśli tak, zamiast wywoływać numer File.ReadAllLines, należy zadzwonić pod numer File.ReadAllText i pobrać go jako pojedynczy ciąg. Następnie musisz przeanalizować go jako JSON, aby Web API mógł go ponownie serializować.

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

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

Ta wola:

  1. Przeczytaj plik jako ciąg
  2. przetworzy go jako obiekt JSON do obiektu CLR
  3. odesłać go do sieci Web API tak, że może on być sformatowany jako JSON (lub XML, lub cokolwiek innego)
16

Znalazłem inne rozwiązanie, które działa również, jeśli ktoś był zainteresowany.

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

Ogólne wyrażenie HttpResponseMessage jest teraz przestarzałe, ponieważ nie było typu bezpieczne .. http://stackoverflow.com/questions/10655350/returning-http-status-code-from-asp-net-mvc-4-web-api -controller – Markive

+4

+1: HttpResponseMessage może być przestarzałe, ale działało w sytuacji, gdy nazwy właściwości JSON nie były prawidłowe CLR (np. zawierały spacje). Twoja odpowiedź dała mi wskazówkę, której potrzebowałem, aby zwrócić wygenerowany nieprzetworzony tekst jako JSON. Dzięki –

2

potrzebowałem czegoś podobnego, ale IHttpActionResult (WebApi2) było wymagane.

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