我想让我的Controller实现我的数据接口,返回自定义对象。所有对象都是可序列化的,并由JSON属性修饰。所以我想让我的控制器方法就是:
public class MyController : Controller, IMyInterface
{
public Foo[] GetFoosByName(string name)
{
return new Foo[]{new Foo(name), new Foo(name)}
}
}
如果我这样做,我只会得到“Foo []”回复。我想得到的是JSON序列化的Foo对象 我可以通过将我的回答改为JsonResult来轻松实现这一点:
public JsonResult GetFoosByName(string name)
{
return Json(new Foo[]{new Foo(name), new Foo(name)});
}
但是后来我无法以易于维护的方式实现IMyInterface。
关于如何在返回JsonResult时自动获取行为的任何想法,但仍保留原始返回类型?
答案 0 :(得分:1)
一般来说,我会建议不要这样的模式。理想情况下,MVC控制器应该是最顶层的,我认为它不应该实现接口。您应该在MVC控制器下面的服务层中实现这样的接口。
但是,如果你仍然想这样做,你可以像这样使用显式实现。
public class MyController : Controller, IMyInterface
{
public JsonResult GetFoosByName(string name)
{
return Json(((IMyInterface)this).GetFoosByName(name));
}
Foo[] IMyInterface.GetFoosByName(string name)
{
return new[] { new Foo(name) };
}
}