Javascript 使用C将函数序列化为json中的参数#
我正在尝试创建使用C#在jQuery中创建对象所需的json。需要的json是Javascript 使用C将函数序列化为json中的参数#,javascript,c#,json,serialization,highcharts,Javascript,C#,Json,Serialization,Highcharts,我正在尝试创建使用C#在jQuery中创建对象所需的json。需要的json是 { title: 'title text', upperVal: 40, lowerVal: 5, mouseover: function() { return 'difference ' + (upperVal - lowerVal); } } 前几个元素足够简单。我创建了一个类来表示对象JSObj,然后通过JavascriptSerializer.Serialize()运行它 这
{
title: 'title text',
upperVal: 40,
lowerVal: 5,
mouseover: function() { return 'difference ' + (upperVal - lowerVal); }
}
前几个元素足够简单。我创建了一个类来表示对象JSObj,然后通过JavascriptSerializer.Serialize()运行它
这对于前几个属性很有效,但我不知道如何返回正确的mouseover函数
编辑:提供的代码只是示例代码,因为我实际使用的json的结构有点复杂。我使用的是HighCharts,我真正需要使用的一个配置选项需要一个函数,即使它们不是真正有效的json(),所以不幸的是,我无法避免这个问题json格式不能直接表示这样的函数。您可以将其编码为字符串,然后在客户机中显式实例化函数,或者传递客户机中已经存在的函数的名称。从JSON格式定义中可以清楚地看出,JSON中不能有函数 在应用程序中的其他位置定义函数并显式调用它
任何支持JSON函数的黑客行为都是不好的做法,因为这与JSON作为“轻量级数据交换格式”的目的相冲突。您不能交换函数,因为除了javascript之外,其他任何东西都无法理解它们。我正试图实现类似的功能。 在我的例子中,我使用MVC Razor语法试图生成一个json对象,并使用@syntax传递一个函数 我能够使用Json.net库(使用JsonConvert和JRaw)获得所需的输出。 例如:
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对象(而不是字符串中的函数)
职位:
然后在客户机中显式实例化函数
-好主意!
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);
{"Title":"Test","UpperVal":10,"LowerVal":4,"MouseOver":function(){ return 6; }}