0

を使用してエンコードされたアクションの結果JsonResultは、シリアライズが過度に冗長に見えます。例えば:

{"foo":"bar","list":["a","b"],"map":{"a":1,"b":2,"c":3}}

JavaScript は、この短いバージョンを同等のものとして完全に満足しているようです。

{foo:"bar",list:["a","b"],map:{a:1,b:2,c:3}}

したがって、この質問は 2 つあります。

  1. すべてのラベルが有効な JavaScript 識別子であると仮定すると、前者の方が優れているという理由はありますか?
  2. ASP.NET MVC フレームワークに、この短い構文を使用してメッセージをエンコードさせることはできますか?

私はかなり AJAX を多用するアプリを作成しており、メッセージ サイズを 15% から 20% 節約できると計算しました。多くの場合、応答を単一の TCP パケットに収めるかどうかの違いになります。パフォーマンスを無視したとしても、毎月の帯域幅の請求額がそれだけ削減されることは恩恵です。

編集

Justin が指摘しているように、JSON 標準では引用符が必要ですが、純粋な JavaScript を使用するブラウザーでは引用符は必要ありません。独自の JSON シリアライザーを作成するよりも簡単な方法で、.NET Web フレームワークに引用符を削除させることはできますか?

4

2 に答える 2

1

引用について話している別のスレッドがありました:

プロパティ名の JSON 構文

基本的な要点は、引用符を使用しないことは有効な JavaScript として認定されますが、有効な JSON としては認定されないということです。


プロパティの引用符を含めないように JSON を変更する限り、それが良いアイデアかどうかはわかりません。外部 API の JSON 呼び出しを開くことを選択した場合、無効な形式で何が問題になるかは誰にもわかりません。

しかし、ここで先に進みたい場合は、JSON.NET オープン ソース ライブラリをダウンロードして変更することをお勧めします。

http://json.codeplex.com/

彼らのドキュメントには、JSON フットプリント サイズの削減に関する特定の記事がありますが、引用符の削除については言及されていません。

http://james.newtonking.com/projects/json/help/ReducingSerializedJSONSize.html

このコードをダウンロードして JSONTextWriter クラスを変更すると、JsonResult クラスでデフォルトで使用される System.Web.Script.Serialization.JavaScriptSerializer クラスの代わりに、このシリアライザーを使用するカスタム ActionResult を MVC で作成できます。MVC Contrib プロジェクトの他のデータ型でこれを行う非常に優れた例がいくつかあります。

http://mvccontrib.codeplex.com/

お役に立てれば。

于 2010-11-09T04:01:57.157 に答える
1

ビデオ「JavaScript - The Good Parts」の 30:20 で、Douglas Crockford は、クライアントとサーバーの間で送信される最初の JSON メッセージが失敗したと述べています。 JavaScript の単語。彼は、必ずしもこのようにする必要はないと説明します (インタープリターは文脈に基づいて区別できます) が、急いで開発された言語をすり抜けて標準に組み込まれた多くの癖の 1 つです。

したがって、フィールド名を引用符で囲む必要があります。もちろん、予約語のリストを保持し、それらのみを引用符で囲むことは可能であるべきです。

于 2010-11-24T00:47:11.410 に答える