你看一下MSDN上的这张图就明了了,
namespace Microsoft.AspNetCore.Mvc
{
/// <summary>
/// An action result which formats the given object as JSON.
/// </summary>
public class JsonResult : ActionResult
{
/// <summary>
/// Gets or sets the <see cref="T:Microsoft.Net.Http.Headers.MediaTypeHeaderValue" /> representing the Content-Type header of the response.
/// </summary>
我知道是继承关系,但是感觉有点怪怪的
就像 返回int 返回string 都继承object 但是为什么我们不写object返回呢
@efreer:
如果你Controller
想要返回 Json
类型的数据时,你可以用JsonResult
,一般用在比如WebApi
或者返回给手机客户端。
ActionResult
一般都是用来返回给一个View
的
@BUTTERAPPLE: 但是json 写成 ActionResult也可以吧,性能有变化吗??内部有什么区别??
@BUTTERAPPLE: 还是只为了调用者方面区分??
@efreer: 可以是可以,但是主要区别还是在你获取到数据的时候,你需要进行类型转换。比如你刚才说的 object ,那我一个方法返回 1111 ,你觉得是 int 类型还是 string 类型呢?
@BUTTERAPPLE: 但是ActionResult和 jsonresult 用什么都返回string 和 返回int 和object不一样啊,不需要类型转换
ActionResult 可以返回 text xml json 等等格式内容
而JsonResult 返回Json格式
默认情况下 如果只想返回 Json类型数据 就用JsonResult
代码也清晰点
BUTTERAPPLE 已经说得很清楚了
就是ActionResult是抽象父类,JsonResult是它的子类,其他的子类都在图里。
你把action方法的返回值定义为 ActionResult或者JsonResult,在功能上没有任何不同。
这是C#面向对象编程中多态性的典型应用(基于抽闲类这种方式)。