使用C#将函数序列化为json中的参数

我正在尝试使用C#创建在jQuery中创建对象所需的json。 json需要的是

{ title: 'title text', upperVal: 40, lowerVal: 5, mouseover: function() { return 'difference ' + (upperVal - lowerVal); } } 

前几个元素很简单。 我创建了一个表示对象JSObj的类,然后通过JavascriptSerializer.Serialize()运行它

 public class JSObj { public string title { get; set; } public int upperVal { get; set; } public int lowerVal { get; set; } } 

这适用于前几个属性,但我不知道如何返回正确的鼠标hoverfunction。

编辑:提供的代码只是示例代码,因为我实际使用的json的结构有点复杂。 我正在使用HighCharts,我真正需要使用的配置选项之一需要一个function,即使它们不是真正有效的json( http://www.highcharts.com/ref/#tooltip–formatter )所以不幸的是我无法避免这个问题

来自JSON格式定义http://json.org/很明显你不能拥有JSON中的函数。

在应用程序的其他位置定义您的函数并显式调用它

任何类型的hack来支持JSON中的函数都是不好的做法,因为它与JSON的目的相冲突是“轻量级数据交换格式”。 你不能交换function,因为除了javascript以外,其他任何东西都无法理解它们。

我试图完成类似的事情。 在我的情况下,我使用MVC Razor语法尝试使用@ 语法生成一个传入函数的json对象。

我能够使用Json.net库(使用JsonConvert和JRaw)获得所需的输出。 http://james.newtonking.com/projects/json/help/html/SerializeRawJson.htm

例:

 public class JSObj { public string Title { get; set; } public int UpperVal { get; set; } public int LowerVal { get; set; } public object MouseOver { get { // use JRaw to set the value of the anonymous function return new JRaw(string.Format(@"function(){{ return {0}; }}", UpperVal - LowerVal)); } } } // and then serialize using the JsonConvert class var obj = new JSObj { Title = "Test", LowerVal = 4, UpperVal = 10 }; var jsonObj = JsonConvert.SerializeObject(obj); 

那应该是你带有函数的json对象(而不是字符串中的函数)。

 {"Title":"Test","UpperVal":10,"LowerVal":4,"MouseOver":function(){ return 6; }} 

发布: 如何将函数序列化为json(使用razor @

JSON格式不能代表(直接)这样的函数。 您可以将其编码为字符串,然后在客户端中显式实例化该函数,或者传递已经存在于客户端的函数的名称。