ASP.NET MVC:构建Json ActionResult的最佳C#方法

6

过去也有人问过类似的问题,但现在这些问题似乎已经有点陈旧了。我试图得到有关在ASP.NET MVC中构建JsonResult的最佳方法的当前普遍共识。这个问题的背景是使用.NET 4/4.5和MVC 4提供的最新方法。

以下是我多年来遇到的一些流行方法:

var json1 = new { foo = 123, bar = "abc" };

var json2 = new Dictionary<string, object>{ { "foo", 123 }, { "bar", "abc" } };

dynamic json3;
json3.foo = 123;
json3.bar = "abc";

请您也解释一下您偏好的方法的优缺点。

1
无论哪种方法对您和您的团队最好,所有三种方法都会产生相同的结果。 - jrummell
请使用WebApi(http://www.asp.net/web-api)代替。 - Ian Mercer
-1 这个问题没有提到 ActionResult - ctrl-alt-delor
@richard 除了控制器返回一个ActionResult之外,它如何适用于在C#中构建JSON? - Didaxis
1个回答

18

个人偏好使用这个:

public class MyViewModel
{
    public int Foo { get; set; }
    public string Bar { get; set; }
}

然后:

public ActionResult Foo()
{
    var model = new MyViewModel
    {
        Foo = 123,
        Bar = "abc"
    };
    return Json(model, JsonRequestBehavior.AllowGet);
}

优点:

  • 强类型
  • 没有神秘字符串
  • 易于重构
  • 便于进行单元测试
  • 代码可以完全轻松地转移到新的Web Api控制器操作调用,同时保持前面提到的内容不变:

    public class ValuesController: ApiController
    {
        public MyViewModel Foo()
        {
            return new MyViewModel
            {
                Foo = 123,
                Bar = "abc"
            };
        }
    }
    

缺点:目前还没有遇到过。


1
强类型还是弱类型? - Shyju
3
当然可以,strong typing 指的是强类型,我的键盘上 io 是挨在一起的(已经坏了)。 - Darin Dimitrov
一个缺点是第一个代码块会让其他人可以访问你的Json数据,因为你只是将它扔到页面上。Web Api不会有这个问题,因为它有CORS保护。所以如果数据很敏感,Web API块更可取。 - Daniël Tulp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接