IHttpActionResult 在没有序列化的情况下返回 json?

IHttpActionResult Returning json without serialization?

我有一个简单的 Get 方法 returning json 来自文件(用于测试目的):

public IHttpActionResult GetJson()
    var json = "{ }";
    string fn = System.Web.Hosting.HostingEnvironment.MapPath("~/App_Data/test1.json");
    if (System.IO.File.Exists(fn))
        json = System.IO.File.ReadAllText(fn);
    return Ok<string>(json);

但是,IHttpActionResult 函数 "Ok" 似乎尝试序列化 json,即使它已经是我想要 return 的格式,这使得响应包含中断像这样的字符:

{\r\n  \"id\": \"\",\r\n  \"name\": null,\r\n  \"time\": null,\r\n}

是否有一个 IHttpActionResult 的内置实现,它 return 是一个 json 字符串而不尝试序列化它?

既然你已经有了一个 string,你应该能够简单地做:

public IHttpActionResult GetJson()
{
     return Json("...");
}

阅读 Ok 后,它确实表明以下内容:

The content value to negotiate and format the entire body.

所以即使 File.ReadAllText 不包括回车 return 和换行符,我假设它仍然保留格式。这就是 Ok 结果会尝试序列化结果的原因。

看来这个问题最简单的解决方案是先将 JSON 字符串反序列化为一个对象,然后 return 它:

var json_obj = JsonConvert.DeserializeObject(json);
return Json(json_obj);