2012-06-20 2 views
4

У меня есть структура данных, подобная JSON (которую я не хочу менять), которая в настоящее время создается файлом .aspx, выплевывая javascript. Похоже, что .NET ел jQuery на обед, а затем вырвался ...Возвращение JSON, содержащее функции javascript из ASP.NET MVC

Я хотел бы переписать все это на действие контроллера MVC, которое возвращает JsonResult, в основном, создавая анонимный объект и передавая его return Json(data).

Однако я не могу понять, как построить объект C#, когда некоторые свойства объекта JSON, который я хочу построить, на самом деле являются функциями JavaScript. Как мне это сделать?

Пример:

Я хочу создать следующий 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); 

Есть ли хороший способ сделать также остальное?

+0

JSON явно исключает функции, поскольку он не предназначен для структуры данных только для JavaScript (несмотря на JS в названии). Поэтому мы не должны включать имя функции в JSON –

ответ

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 непосредственно в ответ без двойных кавычек.

0

JSON явно исключает функции, поскольку он не предназначен для структуры данных только для JavaScript (несмотря на JS в названии). Поэтому мы не должны включать имя функции в JSON

+0

ОК, я стою исправлено. Но тогда мне не нужен JSON - просто что-то «похожее на JSON» ... поэтому я все еще удивляюсь, как добиться того, что я пытаюсь сделать. –

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

} 
+0

Этот код не компилируется в C#, а также является недопустимым синтаксисом в JavaScript ... –

+3

Как это недействительно Синтаксис Javascript? –

Смежные вопросы