Вернуть JSON файл с помощью API-интерфейса ASP.NET
Я пытаюсь вернуть файл JSON с помощью ASP.NET Web API (для тестирования).
public string[] Get()
{
string[] text = System.IO.File.ReadAllLines(@"c:\data.json");
return text;
}
В Fiddler это выглядит как тип Json, но когда я отлаживаю в Chrome и просматриваю объект, он выглядит как и массив отдельных строк (слева). Правильное изображение - это то, как должен выглядеть объект, когда я его использую.
Может кто-нибудь сказать мне, что я должен вернуть, чтобы получить результат Json в правильном формате?
Ответы
Ответ 1
Имеет ли файл уже действующий JSON? Если это так, вместо вызова File.ReadAllLines
вы должны вызвать File.ReadAllText
и получить его как одну строку. Затем вам нужно проанализировать его как JSON, чтобы Web API мог его повторно сериализовать.
public object Get()
{
string allText = System.IO.File.ReadAllText(@"c:\data.json");
object jsonObject = JsonConvert.DeserializeObject(allText);
return jsonObject;
}
Это будет:
- Прочитайте файл как строку
- Разберите его как объект JSON в объект CLR
- Верните его в веб-интерфейс API, чтобы его можно форматировать как JSON (или XML или что-то еще)
Ответ 2
Я нашел другое решение, которое работает, если кто-то заинтересован.
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;
}
Ответ 3
Мне нужно что-то подобное, но IHttpActionResult (WebApi2) было требуется.
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);
}