Подтвердить что ты не робот

Вернуть 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 в правильном формате?

alt

4b9b3361

Ответ 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);
}