29

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

2
  • stackoverflow.com/questions/9847564/… help you! Commented Mar 31, 2013 at 3:55
  • @ssilas777 I don't think that's the same question. That's about returning XML vs. JSON as opposed to returning incorrect JSON. Commented Mar 31, 2013 at 3:58

3 Answers 3

33

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)
Sign up to request clarification or add additional context in comments.

1 Comment

how would one do this if the .JSON file would be an uri and not on c:, the file does not accept an uri as input
23

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

2 Comments

The generic HttpResponseMessage is now deprecated as it wasn't Type <T> safe.. stackoverflow.com/questions/10655350/…
+1: The HttpResponseMessage may be deprecated, but it worked in the situation where the JSON property names were not valid CLR (e.g. had spaces in them). Your answer gave me the clue I needed to return generated raw text as JSON. Thanks
5

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.