我有一个类似
JSON的数据结构(我不想改变),当前由.aspx文件吐出javascript生成.看起来.NET在午餐时吃了jQuery,然后呕吐……
我想将整个事情重写为一个返回JsonResult的MVC控制器动作,基本上是通过构建一个匿名对象并传递它来返回Json(数据).
但是,当我想构建的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);
还有什么好方法可以做其余的吗?
最佳答案 .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直接写入响应而不使用双引号.