4

我有一个类似 JSON 的数据结构(我不想更改),它当前是由一个.aspx吐出 javascript 的文件生成的。看起来 .NET 午餐吃了 jQuery,然后吐了……

我想将整个事情重写为返回 a 的 MVC 控制器操作JsonResult,基本上是通过构建一个匿名对象并将其传递给return Json(data).

但是,当我要构建的 JSON 对象上的某些属性实际上是 JavaScript 函数时,我无法弄清楚如何构建 C# 对象。我怎么做?

例子:

我想创建以下类似 JSON 的对象:

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

您会看到,我希望能够为我在其他地方(.js通常在文件中)定义的 JavaScript 函数指定两个函数句柄,并且我想定义新的内联函数。

我知道如何在 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 明确排除了函数,因为它并不意味着仅是 JavaScript 数据结构(尽管名称中有 JS)。所以我们不应该在 JSON 中包含函数名

于 2012-06-20T12:18:16.867 回答
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 回答