web-dev-qa-db-fra.com

Renvoyer un fichier JSON avec l'API Web ASP.NET

J'essaie de renvoyer un fichier JSON à l'aide de l'API Web ASP.NET (pour les tests).

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

    return text;
}

Dans Fiddler, cela apparaît comme un type Json, mais lorsque je débogue dans Chrome et que je vois l'objet, il apparaît sous la forme d'un tableau de lignes individuelles (à gauche). L'image de droite est à quoi doit ressembler l'objet quand je l'utilise.

Quelqu'un peut-il me dire ce que je dois retourner pour obtenir un résultat Json dans le format correct?

alt

26
ojhawkins

Le fichier contient-il déjà du JSON valide? Si oui, au lieu d'appeler File.ReadAllLines vous devez appeler File.ReadAllText et obtenez-le comme une chaîne unique. Ensuite, vous devez l'analyser en JSON afin que l'API Web puisse le re-sérialiser.

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

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

Cette volonté:

  1. Lire le fichier sous forme de chaîne
  2. Analyser en tant qu'objet JSON dans un objet CLR
  3. Renvoyez-le à l'API Web afin qu'il puisse être formaté en JSON (ou XML, ou autre)
28
Eilon

J'ai trouvé une autre solution qui fonctionne aussi si quelqu'un était intéressé.

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

J'avais besoin de quelque chose de similaire, mais IHttpActionResult ( WebApi2 ) était requis.

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);
}
3
Alex Nolasco