Newtonsoft JSON

时间:2013-04-01 06:28:35

标签: json asp.net-mvc-4

我创建了一个新的MVC4应用程序,默认情况下Newton JSON已添加到Package。

我读到它对序列化和反序列化JSON很有用。这就是它的全部吗?

默认情况下,我们可以使用JSONResult在MVC中发送JSON。在JQuery中使用Stringify我可以在C#中作为一个类接收。

我知道为什么他们会添加Newton JSON。

由于我是MVC的新手并且开始新项目想知道一些有关序列化/反序列化的见解吗?

由于

3 个答案:

答案 0 :(得分:6)

他们添加了Newtonsoft,以便您的WebAPI控制器可以神奇地序列化您返回的对象。在MVC 3中,我们曾经像这样返回我们的对象:

public ActionResult GetPerson(int id)
{
    var person = _personRepo.Get(id);
    return Json(person);
}

Web API 项目中,您可以返回此人并将为您序列化:

public Person GetPerson(int id)
{
    var person = _personRepo.Get(id);
    return person
}

答案 1 :(得分:0)

使用JsonResult并在后期操作上返回Json(yourObject),如果您正在执行GET操作,则返回Json(yourObject, JsonRequestBehavior.AllowGet)

如果您想使用Newton Json.NET反序列化Json,请查看http://www.hanselman.com/blog/NuGetPackageOfTheWeek4DeserializingJSONWithJsonNET.aspx

答案 2 :(得分:0)

如果你的项目只是一个没有WebApi的MVC项目,那么Newtonsoft.Json没有被添加用于返回JsonResults,因为MVC返回的JsonResult使用了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