【问题标题】:IHttpActionResult Returning json without serialization?IHttpActionResult 返回没有序列化的json?
【发布时间】:2018-07-09 16:05:05
【问题描述】:

我有一个简单的 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 函数“Ok”似乎尝试序列化 json,即使它已经是我想要返回它的格式,这使得响应包含中断字符,例如:

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

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

【问题讨论】:

  • 将返回类型更改为stringreturn json;
  • 你有没有解决过这个@Nakata 仍然返回 IHttpActionResult 的问题?

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


【解决方案1】:

既然你已经有了string,你应该可以简单地做:

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

在阅读了Ok 之后,它确实表明了以下几点:

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

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

【讨论】:

  • 我也尝试返回 Json("..."),结果相同。
  • 悬停时json 会显示什么?只是字符串或/r /n?
  • 这取决于我使用的是 json 查看器还是字符串查看器,但是返回的字符串始终包含 /r /n。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2015-01-25
    • 2017-06-12
    • 2018-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-31
    相关资源
    最近更新 更多