You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LinqPad返回JsonResult遇CS1955错误:Json不可作为方法调用

解决LinqPad中调用Json()方法报错CS1955的问题

这问题我太熟了!咱们先拆解一下报错的根本原因:

在MVC应用里,你的控制器类继承了System.Web.Mvc.Controller抽象类,这个类里的Json()是个实例方法——只有当你在Controller的子类里写代码时,才能直接调用它。但LinqPad里的代码默认并没有继承Controller类,你直接写Json(...)的时候,编译器找不到可调用的方法,反而可能把Json当成了某个不可调用的成员(比如属性),所以就抛出了CS1955 Non-invocable member 'Json' cannot be used like a method这个错误。

给你几个可行的解决办法,按需选择:

方法1:手动实例化JsonResult(最直接,无需依赖Controller)

JsonResult本身就是一个可直接实例化的类,MVC里的Json()方法本质也是帮你封装了这个实例化过程。你可以直接创建它并设置属性,效果和MVC里完全一致:

public JsonResult GetReservedDrinksInventory(DTO_CAMEEV dto) 
{ 
    return new JsonResult 
    { 
        Data = new { Result = "OK" },
        // 如果需要允许GET请求访问这个结果,手动设置这个属性(MVC默认的Json方法会处理这个逻辑)
        JsonRequestBehavior = JsonRequestBehavior.AllowGet 
    }; 
}

方法2:让LinqPad中的类继承Controller(模拟MVC环境)

如果你需要用到Controller类的其他方法,或者想完全照搬MVC里的写法,可以让你的类继承System.Web.Mvc.Controller,记得先在LinqPad里添加System.Web.Mvc的引用(右键查询窗口→添加引用,找到对应程序集):

void Main()
{
    // 测试调用
    var controller = new MyTestController();
    controller.GetReservedDrinksInventory(new DTO_CAMEEV()).Dump();
}

public class MyTestController : System.Web.Mvc.Controller
{
    public JsonResult GetReservedDrinksInventory(DTO_CAMEEV dto) 
    { 
        // 现在就能像MVC里一样正常调用Json()方法了
        return Json(new { Result = "OK" }); 
    }
}

// 你的DTO定义
public class DTO_CAMEEV { }

方法3:直接返回数据让LinqPad自动处理(快速测试用)

如果你只是在LinqPad里测试业务逻辑,不需要严格返回JsonResult类型,直接返回匿名对象或者你的数据模型就行——LinqPad会自动帮你格式化显示成JSON或其他友好格式:

public object GetReservedDrinksInventory(DTO_CAMEEV dto) 
{ 
    return new { Result = "OK" }; 
}

// 调用时用Dump()查看结果
GetReservedDrinksInventory(new DTO_CAMEEV()).Dump();

内容的提问来源于stack exchange,提问作者FrenkyB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:43:23