1. ホーム
  2. asp.net-mvc-3

[解決済み] ASP.NET MVC 3でJSON.NETをデフォルトのJSONシリアライザーとして使用する - それは可能か?

2022-12-19 06:13:28

質問

このような場合 JSON.NET を ASP.NET MVC 3 のデフォルト JSON シリアライザーとして使用できますか?

私の調査によると、これを達成する唯一の方法は、次のように思われます。 を拡張して、ActionResult として MVC3でのJsonResultは仮想ではない ...

ASP.NET MVC 3では、JSONにシリアライズするためのプラグイン可能なプロバイダを指定する方法があることを期待していました。

感想は?

どのように解決するのですか?

私はそれを行うための最良の方法は、 - あなたのリンクに記載されているように - ActionResultを拡張するか、直接JsonResultを拡張することであると信じています。

コントローラ上で仮想でないJsonResultメソッドについては、それは真実ではなく、適切なオーバーロードを選択するだけです。これはうまく機能します。

protected override JsonResult Json(object data, string contentType, Encoding contentEncoding)

編集1 : JsonResultの拡張...

public class JsonNetResult : JsonResult
{
    public override void ExecuteResult(ControllerContext context)
    {
        if (context == null)
            throw new ArgumentNullException("context");

        var response = context.HttpContext.Response;

        response.ContentType = !String.IsNullOrEmpty(ContentType) 
            ? ContentType 
            : "application/json";

        if (ContentEncoding != null)
            response.ContentEncoding = ContentEncoding;

        // If you need special handling, you can call another form of SerializeObject below
        var serializedObject = JsonConvert.SerializeObject(Data, Formatting.Indented);
        response.Write(serializedObject);
    }

編集2 : 私は、以下の提案に従って、データがNULLであることのチェックを削除しました。これは、新しいバージョンのJQueryを幸せにするはずで、そのときレスポンスが無条件にデシリアライズされることができるように、行うべき正気のことのように思われます。しかし、これは ASP.NET MVC からの JSON 応答のデフォルトの動作ではないことに注意してください。