用ASP.NET Web API返回JSON文件

29

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

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

    return text;
}
在 Fiddler 中,这似乎是一个 Json 类型,但当我在 Chrome 中进行调试并查看对象时,它显示为单独行的数组(左侧)。使用时应该像右侧图像中的对象一样。请问有人能告诉我该返回什么才能获得正确格式的 Json 结果吗? alt

这是一个关于ASP.NET Web API如何在Chrome中返回JSON而不是XML的问题。这个Stack Overflow链接可能会对你有所帮助! - ssilas777
@ssilas777 我认为这不是同一个问题。那个问题是关于返回 XML vs. JSON,而不是返回错误的 JSON。 - Eilon
3个回答

32
文件中是否已经有有效的JSON数据?如果是这样,您应该调用File.ReadAllText获取单个字符串,而不是调用File.ReadAllLines。然后需要将其解析为JSON,以便Web API可以重新序列化它。
public object Get()
{
    string allText = System.IO.File.ReadAllText(@"c:\data.json");

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

这将会:

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

如果 .JSON 文件是一个 URI 而不是在 C: 上,那么该怎么做呢?该文件不接受 URI 作为输入。 - Ewald Bos

23

我找到了另一种解决方案,如果有人感兴趣的话,它也可以起作用。

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

2
通用的HttpResponseMessage现已被弃用,因为它不是Type <T>安全的。https://dev59.com/BGgv5IYBdhLWcg3wXPot - Markive
4
HttpResponseMessage可能已经被弃用了,但在JSON属性名无效(例如其中包含空格)的情况下仍然有效。您的答案给了我提示,使我能够返回生成的原始文本作为JSON。谢谢! - iCollect.it Ltd

5

我需要类似的东西,但是需要使用 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);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接