ObjectResult 和 JsonResult 有啥区别

Posted

技术标签:

【中文标题】ObjectResult 和 JsonResult 有啥区别【英文标题】:What is difference between ObjectResult and JsonResultObjectResult 和 JsonResult 有什么区别 【发布时间】:2016-12-11 19:54:19 【问题描述】:

Microsoft.AspNetCore.Mvc 命名空间中有两个类:

ObjectResultJsonResult

两者都将返回的对象转换为 JSON 格式。

它们有什么区别,使用它们的目的是什么?

【问题讨论】:

【参考方案1】:

JsonResult 是一个IActionResult,它将给定对象格式化为 JSON

ObjectResult 是一个内置内容协商的IActionResult

在其负责写入响应流的ExecuteResultAsync 中,框架将遍历可用的格式化程序并选择一个相关的。

选择格式化程序的逻辑与 ASP.NET Web API 中的类似,并且基于以下优先顺序:

接受标头 内容类型标头 基于类型匹配的选择

OkObjectResult 类

一个Microsoft.AspNetCore.Mvc.ObjectResult 在执行时执行 内容协商,格式化实体主体,并生成一个 Microsoft.AspNetCore.Http.StatusCodes.Status200OK 回复如果 协商和格式化成功。

参考资料:

Migrate from ASP.NET MVC to ASP.NET Core MVC Asp.Net Documentation: JsonResult Class Asp.Net Documentation: ObjectResult Class Asp.Net Documentation: OkObjectResult Class

【讨论】:

感谢您的回答。所以 ObjectResult 是更通用的类,没有任何理由使用 JsonResult? 如果您只想返回 json 数据,请使用JsonResult。如果您希望 api 更灵活并允许返回不同的格式,那么ObjectResult 将允许内容协商。 为什么不使用 ObjectResult 来返回 json 呢(在这种情况下,它将是相同的样式)?这种情况下 JsonResult 有什么优势? 我想这是一个偏好问题。 JsonResult 允许您在不做太多工作的情况下限制内容类型。

以上是关于ObjectResult 和 JsonResult 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

Azure 函数不返回 XML 响应

使用Moq模拟实体框架6 ObjectResult

EF6 - 无法模拟ObjectResult的返回值 用于单元测试

从ObjectResult获取价值

ObjectResult<Nullable<System.DateTime>> 没有得到存储过程结果

C#,EF中执行存储过程返回一个ObjectResult对象,这个对象是延迟加载的吗?