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);
我有一个简单的 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);