Reputation: 3278
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?
Upvotes: 29
Views: 51118
Reputation: 19456
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);
}
Upvotes: 5
Reputation: 25704
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:
Upvotes: 33
Reputation: 3278
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;
}
Upvotes: 23