Return JSON file with ASP.NET Web API

43,811

Solution 1

Does the file already has valid JSON in it? If so, instead of calling File.ReadAllLines you should call File.ReadAllText and get it as a single string. Then you need to parse it as JSON so that Web API can re-serialize it.

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

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

This will:

  1. Read the file as a string
  2. Parse it as a JSON object into a CLR object
  3. Return it to Web API so that it can be formatted as JSON (or XML, or whatever)

Solution 2

I found another solution which works also if anyone was interested.

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

Solution 3

I needed something similar, but IHttpActionResult (WebApi2) was required.

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);
}
Share:
43,811
ojhawkins
Author by

ojhawkins

Developer working in financial markets & studying CS.

Updated on September 02, 2020

Comments

  • ojhawkins
    ojhawkins over 3 years

    I am trying to return a JSON file using ASP.NET Web API (for testing).

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

    In Fiddler this does appear as a Json type but when I debug in Chrome and view the object it appears as and array of individual lines (left). The right image is what the object should look like when I am using it.

    Can anyone tell me what I should return to achieve a Json result in the correct format?

    alt