我正在尝试使用MVC Controller实现状态机。客户端将json消息发送到控制器的动作Play。每条消息都有一个MessageCode和一些其他附加数据,这些数据取决于MessageCode。
例子:
{MessageCode:1, words:["aaa","bbb","ccc"]}
{MessageCode:2, ClientsAge: 56, ClientsName:"Jon"}
...
因此,我有
public JsonResult Play(int MessageCode)
{
switch(MessageCode){
case 1:
//Perform some additional checks
return _DoSomething1(words);
case 2:
//Perform some additional checks
return _DoSomething2(ClientsAge,ClientsName);
//
}
每个私有方法_DoSomething1,_DoSomething2等都有不同的签名。
答案 0 :(得分:0)
您可以使用Json函数返回属性的JSON序列化,例如
return Json(ClientsName)
并使用Json()获取您想要转换为JSON的内容
如果您想要串行化并取消实现JSON,请查看此链接How to: Serialize and Deserialize JSON Data
答案 1 :(得分:0)
您可以创建一个自定义模型绑定器,它将您的Json输入转换为不同的模型(例如Step01Model
,Step02Model
,...)
This SO question中有一些代码可以指向正确的方向。
基本上不是在一个操作方法中进行切换,而是在Model Binder中执行,然后调用类中的重载操作:
public ActionResult Play(Step01Model step01Model) { ... }
public ActionResult Play(Step02Model step02Model) { ... }