在ASP.NET MVC Controller中实现数据接口并返回JSON

时间:2016-10-24 13:21:42

标签: asp.net-mvc

我想让我的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时自动获取行为的任何想法,但仍保留原始返回类型?

1 个答案:

答案 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) };
    }    
}