4

.aspxJavaScriptを吐き出すファイルによって現在生成されているJSONのようなデータ構造(変更したくない)があります。.NETが昼食にjQueryを食べた後、嘔吐したようです...

JsonResult基本的に匿名オブジェクトを作成してに渡すことで、を返すMVCコントローラーアクションにすべてを書き直したいと思いますreturn Json(data)

ただし、作成するJSONオブジェクトのプロパティの一部が実際にはJavaScript関数である場合、C#オブジェクトを作成する方法がわかりません。それ、どうやったら出来るの?

例:

次のJSONのようなオブジェクトを作成したいと思います。

{
    id: 55, 
    name: 'john smith', 
    age: 32,
    dostuff: aPredefinedFunctionHandle,
    isOlderThan: function(other) { return age > other.age } 
}

他の場所(通常はファイル内)で定義したJavaScript関数に両方の関数ハンドルを指定できるようにしたいことと.js、新しいインライン関数を定義したいことがわかります。

私はC#でそのオブジェクトの一部を構築する方法を知っています:

var data = new { id = 55, name = "john smith", age = 32 };
return Json(data);

残りの部分も行うための良い方法はありますか?

4

3 に答える 3

2

.NETには、javascript関数にマップする組み込み型はありません。したがって、関数を表すカスタムタイプを作成し、自分でシリアル化を行う必要がある場合があります。

このようなもの..

public class JsFunction
{
   public string FunctionString{get; set;}
}

new
{
    id = 55, 
    name = 'john smith', 
    age = 32,
    dostuff = new JsFunction{ FunctionString = "aPredefinedFunctionHandle" },
    isOlderThan = new JsFunction{ FunctionString = "function(other) { return age > 
                    other.age" } 
}

シリアル化では、値のタイプを確認し、FunctionString二重引用符なしで応答に直接書き込む必要がある場合があります。

于 2012-06-20T14:08:04.937 に答える
0

JSONは関数を除外します。データをクラスにカプセル化したいようです。次のようなものはどうですか?

function Person(data) {
   this.id = data.id;
   this.name = data.name;
   this.age = data.age;
   this.isOlderThan = function(other) { return this.age > other.age };

}
于 2012-06-20T13:39:00.057 に答える
0

JSONは、JavaScriptのみのデータ構造を意図していないため(名前にJSがあるにもかかわらず)、関数を明示的に除外します。したがって、JSONに関数名を含めないでください

于 2012-06-20T12:18:16.867 に答える