【问题标题】:Return JSON file with ASP.NET Web API使用 ASP.NET Web API 返回 JSON 文件
【发布时间】:2013-03-21 11:46:56
【问题描述】:

我正在尝试使用 ASP.NET Web API(用于测试)返回一个 JSON 文件。

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

    return text;
}

在 Fiddler 中,这确实显示为 Json 类型,但是当我在 Chrome 中调试并查看对象时,它显示为单行数组(左)。正确的图像是我使用对象时的样子。

谁能告诉我我应该返回什么来获得正确格式的 Json 结果?

【问题讨论】:

标签: c# javascript json asp.net-web-api


【解决方案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;
}

这将:

  1. 以字符串形式读取文件
  2. 将其作为 JSON 对象解析为 CLR 对象
  3. 将其返回给 Web API,以便将其格式化为 JSON(或 XML,或其他)

【讨论】:

  • 如果 .JSON 文件是 uri 而不是 c:,文件不接受 uri 作为输入,该怎么做呢
【解决方案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;
}

【讨论】:

  • 通用 HttpResponseMessage 现在已被弃用,因为它不是类型 安全的。stackoverflow.com/questions/10655350/…
  • +1:HttpResponseMessage 可能已被弃用,但它在 JSON 属性名称不是有效 CLR 的情况下有效(例如,其中包含空格)。您的回答为我提供了将生成的原始文本作为 JSON 返回所需的线索。谢谢
【解决方案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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-17
    • 2016-04-23
    • 1970-01-01
    • 2013-09-21
    • 2017-03-10
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    相关资源
    最近更新 更多