2013-04-01 13 views
6

Utworzono nową aplikację MVC4 i domyślnie dodano pakiet Newton JSON do pakietu.Newtonsoft JSON

Przeczytałem, że jest to przydatne do serializowania i deserializacji JSON. Czy to wszystko, co robi?

Domyślnie możemy wysyłać JSON w MVC używając JSONResult. i przy użyciu Stringify w JQuery można odbierać jako klasy w języku C#.

Wiem, że powinien istnieć jakiś powód, dla którego dodano Newton JSON.

Ponieważ jestem nowy w firmie MVC i rozpoczynając nowy projekt, chciałbym wiedzieć, w jakim kierunku można dokonać serializacji/deserializacji?

Dzięki

+0

Chodzi o wydajność i elastyczność. Aby uzyskać więcej informacji, zobacz http://james.newtonking.com/archive/2012/01/23/json-net-4-0-release-6-serialization-performance.aspx –

Odpowiedz

6

Dodali Newtonsoft tak, że kontroler może magicznie WebAPI serializacji swój zwrócony obiekt. W MVC 3 użyliśmy do powrotu naszego obiektu tak:

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

W Web API projektu można powrócić osobę i będzie w odcinkach dla Ciebie:

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

Ta funkcja dodaje funkcjonalność, jeśli korzystam z interfejsu API w inny sposób. może iść z innymi opcjami? – user2067567

+0

Jeśli robisz projekt MVC, możesz nadal używać tego, co wiesz w MVC 3 (na przykład 'return Json (the_object)'). Jeśli jest to API, to nie ma potrzeby robienia serializacji. –

+0

Jakiś czas temu, ale miałem to samo pytanie, ale doszedłem do innego wniosku. Newtonsoft.json jest zawarty w domyślnym MVC, ponieważ WebGrease jest od niego zależny, a nie dlatego, że WebApi może go potrzebować. – rism

0

Jeśli projekt był tylko projekt MVC bez WebAPI, następnie Newtonsoft.Json nie został dodany do powrotu JsonResults jako JsonResult zwróconej przez MVC wykorzystuje JavaScriptSerializer poniżej:

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

W tym przypadku została dodana, ponieważ WebGrease jest zależny od niego. Usługi łączenia i oczyszczania oferowane przez MVC pod numerem System.Web.Optimization są zależne od WebGrease.

W związku z tym domyślna aplikacja MVC bez WebApi będzie miała zainstalowane Newtonsoft.Json dla usług związanych z pakowaniem i minimalizacją, a nie WebApi.

Aby być jasne JsonResult zwrócony przez WebAPI w System.Web.Http używa Newtonsoft.Json za to serializacji jak poniżej:

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 

Ale Newtonsoft.Json nie wliczono w nie WebAPI, domyślnie projekt MVC tylko w przypadku, możesz zdecydować się na użyj WebApi, jest tam, ponieważ, jak wyżej, potrzebuje tego WebGrease. Nie wiem, co robią w vNext, prawdopodobnie Newtonsoft.Json.

Powiązane problemy