web-dev-qa-db-ja.com

ASP.NET Web APIでJSONファイルを返す

ASP.NET Web API(テスト用)を使用してJSONファイルを返そうとしています。

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

    return text;
}

Fiddlerでは、これはJsonタイプとして表示されますが、Chromeでデバッグし、オブジェクトを表示すると、個々の行の配列として表示されます(左)。右の画像は、オブジェクトの外観です。私がそれを使用しているとき。

Jsonの結果を正しい形式で取得するために何を返す必要があるか、誰にも教えてもらえますか?

alt

26
ojhawkins

ファイルには既に有効なJSONが含まれていますか?その場合、File.ReadAllLinesを呼び出す代わりに、File.ReadAllTextを呼び出して、単一の文字列として取得する必要があります。次に、Web APIが再シリアル化できるように、JSONとして解析する必要があります。

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

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

この意志:

  1. ファイルを文字列として読み取ります
  2. JSONオブジェクトとしてCLRオブジェクトに解析します
  3. JSON(またはXMLなど)としてフォーマットできるように、Web APIに返します
28
Eilon

誰かが興味を持っている場合にも機能する別のソリューションを見つけました。

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

同様のものが必要でしたが、 IHttpActionResultWebApi2 )が必要でした。

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