我创建了一个新的 MVC4 应用程序,默认情况下将 Newton JSON 添加到包中。
我读到它对于序列化和反序列化 JSON 很有用。这就是它的全部吗?
默认情况下,我们可以使用 JSONResult 在 MVC 中发送 JSON。并在 JQuery 中使用 Stringify 我可以在 C# 中作为一个类接收。
我知道他们添加牛顿 JSON 应该有一些原因。
由于我是 MVC 的新手并开始新项目,所以想知道一些关于哪个序列化/反序列化的见解?
谢谢
我创建了一个新的 MVC4 应用程序,默认情况下将 Newton JSON 添加到包中。
我读到它对于序列化和反序列化 JSON 很有用。这就是它的全部吗?
默认情况下,我们可以使用 JSONResult 在 MVC 中发送 JSON。并在 JQuery 中使用 Stringify 我可以在 C# 中作为一个类接收。
我知道他们添加牛顿 JSON 应该有一些原因。
由于我是 MVC 的新手并开始新项目,所以想知道一些关于哪个序列化/反序列化的见解?
谢谢
他们添加了 Newtonsoft,以便您的 WebAPI 控制器可以神奇地序列化您返回的对象。在 MVC 3 中,我们曾经像这样返回我们的对象:
public ActionResult GetPerson(int id)
{
var person = _personRepo.Get(id);
return Json(person);
}
在Web API项目中,您可以返回 person,它将为您序列化:
public Person GetPerson(int id)
{
var person = _personRepo.Get(id);
return person
}
使用 JsonResult 并返回Json(yourObject)
post 操作,或者Json(yourObject, JsonRequestBehavior.AllowGet)
如果您正在执行 GET 操作。
如果您想使用 Newton Json.NET 反序列化 Json,请查看http://www.hanselman.com/blog/NuGetPackageOfTheWeek4DeserializingJSONWithJsonNET.aspx
如果您的项目只是一个没有 WebApi 的 MVC 项目,则Newtonsoft.Json
不会添加返回JsonResults
,因为JsonResult
MVC 返回的使用JavaScriptSerializer
如下:
public override void ExecuteResult(ControllerContext context)
{
if (context == null)
{
throw new ArgumentNullException("context");
}
if (JsonRequestBehavior == JsonRequestBehavior.DenyGet &&
String.Equals(context.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase))
{
throw new InvalidOperationException(MvcResources.JsonRequest_GetNotAllowed);
}
HttpResponseBase response = context.HttpContext.Response;
if (!String.IsNullOrEmpty(ContentType))
{
response.ContentType = ContentType;
}
else
{
response.ContentType = "application/json";
}
if (ContentEncoding != null)
{
response.ContentEncoding = ContentEncoding;
}
if (Data != null)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
if (MaxJsonLength.HasValue)
{
serializer.MaxJsonLength = MaxJsonLength.Value;
}
if (RecursionLimit.HasValue)
{
serializer.RecursionLimit = RecursionLimit.Value;
}
response.Write(serializer.Serialize(Data));
}
}
在这种情况下,它被添加是因为WebGrease
它依赖于它。并且 MVC 中提供的捆绑和缩小服务System.Web.Optimization
依赖于WebGrease
.
因此,将安装一个没有 WebApi 的默认 MVC 应用Newtonsoft.Json
程序用于捆绑和缩小服务而不是 WebApi。
要清楚JsonResult
WebApi 返回的System.Web.Http
确实Newtonsoft.Json
用于它的序列化,如下所示:
using Newtonsoft.Json;
using System;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.Http;
namespace System.Web.Http.Results
{
/// <summary>
/// Represents an action result that returns an <see cref="F:System.Net.HttpStatusCode.OK"/> response with JSON data.
/// </summary>
/// <typeparam name="T">The type of content in the entity body.</typeparam>
public class JsonResult<T> : IHttpActionResult
但Newtonsoft.Json
不包含在非 WebApi、默认 MVC 项目中,以防万一您可能决定使用某些 WebApi,它就在那里,因为如上所述,WebGrease
需要它。不确定他们在 vNext 中做了什么,可能是Newtonsoft.Json
.