IHttpActionResult没有序列化返回json?

时间:2015-12-30 15:01:59

标签: c# json asp.net-web-api2

我有一个简单的Get方法从文件返回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函数&#34; Ok&#34;似乎尝试序列化json,即使它已经是我想要返回它的格式,这使得响应包含中断字符,如:

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

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

2 个答案:

答案 0 :(得分:0)

由于您已经拥有string,因此您应该能够做到:

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

阅读Ok后,它确实显示以下内容:

  

协商和格式化整个正文的内容值。

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

答案 1 :(得分:0)

似乎最简单的解决方案是先将JSON字符串反序列化为对象,然后将其返回:

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