2013-04-01 18 views
6

新しいMVC4アプリケーションを作成しました。デフォルトではNewton JSONがパッケージに追加されました。Newtonsoft JSON

JSONをシリアライズしてデシリアライズすると便利です。これはすべてそれですか?

デフォルトではJSONをMVCでJSONResultを使用して送信できます。 JQueryでStringifyを使用すると、C#でクラスとして受け取ることができます。

ニュートンJSONを追加した理由があるはずです。

私はMVCの初心者で、新しいプロジェクトを開始するときに、どのシリアライズ/シリアライズを行うのかを知りたいと思っています。あなたのWebAPIのコントローラは、魔法のあなたの返されたオブジェクトをシリアル化することができるよう

おかげ

+0

パフォーマンスと柔軟性についてです。パフォーマンスについては、http://james.newtonking.com/archive/2012/01/23/json-net-4-0-release-6-serialization-performance.aspx –

答えて

6

彼らはNewtonsoftを追加しました。あなたは人を返すことができますし、それはあなたのためにシリアライズされますウェブAPIプロジェクトで

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

:MVC 3では、私たちはそうのように私たちのオブジェクトを返すために使用

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

を参照してください。そうすれば、API else iを使用すると機能が追加されます他のオプションと一緒に行くことができますか? – user2067567

+0

MVCプロジェクトをやっているなら、MVC 3で知っているもの(例えば 'return Json(the_object)')を引き続き使用できます。 APIの場合は、自分でシリアル化する必要はありません。 –

+0

これまでのところ、私は同じ質問をしましたが、別の結論に達しました。 Newtonsoft.jsonはWebGreaseに依存しているため、デフォルトのMVCに含まれています.WebApiが必要な場合があるわけではありません。 – rism

0

使用するJsonResultと返すJson(yourObject)ポスト操作ではJson(yourObject, JsonRequestBehavior.AllowGet)、GET操作の場合はJson(yourObject, JsonRequestBehavior.AllowGet)となります。あなたはニュートンJson.NETでJSONをデシリアライズしたい場合は、あなたのプロジェクトが無いWEBAPIとだけMVCプロジェクトだった場合

http://www.hanselman.com/blog/NuGetPackageOfTheWeek4DeserializingJSONWithJsonNET.aspx

0

をチェックアウトし、その後、Newtonsoft.JsonはMVCで返さJsonResultとしてJsonResultsを返すために追加されませんでした以下のように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がそれに依存しているので、それを添加しました。そして、System.Web.OptimizationにMVCによって提供されたバンドルおよびミニサービスは、WebGreaseに依存しています。

WebApiを持たないデフォルトのMVCアプリには、WebApiではなくバンドルおよびミニネーションサービス用にNewtonsoft.Jsonがインストールされます。 System.Web.HttpにWEBAPIによって返さJsonResultが、それは以下のようにシリアライズだため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

関連する問題