C# 为什么在MVC应用程序中使用JSON?

C# 为什么在MVC应用程序中使用JSON?,c#,asp.net-mvc,asp.net-mvc-4,json.net,C#,Asp.net Mvc,Asp.net Mvc 4,Json.net,首先,如果这是一个愚蠢的问题,我想道歉。 在学习MVC的过程中,我遇到了一个难题:创建一个基于模型的强类型视图,例如,该视图将通过两个不同的函数显示所有用户,第一个将返回一个通过用户集合的视图,第二个将返回一个JSON对象集合。所以我的问题是,因为我不熟悉JSON,而且对我来说,使用模型更清楚,那么为什么要在MVC中使用JSON呢 简而言之,为什么使用: var users = _db.Users .Where(r => r.Name.Contains(q))

首先,如果这是一个愚蠢的问题,我想道歉。 在学习MVC的过程中,我遇到了一个难题:创建一个基于模型的强类型视图,例如,该视图将通过两个不同的函数显示所有用户,第一个将返回一个通过用户集合的视图,第二个将返回一个JSON对象集合。所以我的问题是,因为我不熟悉JSON,而且对我来说,使用模型更清楚,那么为什么要在MVC中使用JSON呢

简而言之,为什么使用:

var users = _db.Users
           .Where(r => r.Name.Contains(q))
           .Take(10)
           .Select(r => new { r.Name,r.LastName,r.Address.Country });
        return Json(users, JsonRequestBehavior.AllowGet);
代替:

 var users= _db.Users
           .Where(r => r.Name.Contains(q))
           .Take(10);
            return View(users);

也许这是一个糟糕的代码示例,但如果我们可以直接传递模型,为什么要在将模型传递到视图之前将其转换为Jason呢。

第一个将返回内容类型为
application/JSON的JSON,而后一个将返回内容类型为
text/html
html的html(在适当的视图呈现引擎呈现相关视图后)-它们可以被视为同一资源的两种不同表示形式。您可能希望返回JSON以响应通过AJAX发出的请求,并仅返回所需模型中的数据,但您可能希望返回HTML以响应“正常”请求


开箱即用,ASP.NET MVC不支持内容协商,也就是说,使用设置为特定MIME类型的
Accept
头发出请求可能不会产生具有预期内容类型的响应-在大多数情况下,控制器操作将配置为返回一种特定内容类型的资源(通常是html)。另一方面,ASP.NET Web Api支持开箱即用的内容协商。

如果希望调用返回可在浏览器中呈现的html,则返回一个视图,该视图基本上获取数据并将其应用于html模板


如果希望调用仅返回数据(最有可能由AJAX请求处理),然后返回JSON。

对于第一个代码片段,它更可能用于ajax调用,以无缝地将数据从服务器加载到客户端,并可能在不重新加载页面的情况下不断刷新数据。此外,
用户
实体可能拥有比客户端需要的信息多得多的信息,因此第一个示例是减少所提供的信息,不需要创建新的模型来表示它

第二个示例是一个实际返回视图的控制器操作,该视图是强类型的


如果您要创建一个使用WebApi的项目,您不会返回视图,您会希望客户机请求数据,并希望客户机以其认为合适的方式呈现数据。

JSON(=仅数据)通常用于异步(AJAX)请求可以很容易地由Javascript处理,而视图是样式化的HTML响应,可以由浏览器显示。

客户端库非常理解JSON,因此如果您想解析结果并使用客户端框架/自定义脚本对其进行操作,那么JSON是一个更好的选择(AngularJs就是一个例子).

除了您的问题,在使用JSON时,首先要将模型转换为JSON,但当您的用户发布请求时,您可能会将JSON重新转换为模型,以便将结果持久化到DB.:-) 我