Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用C将函数序列化为json中的参数#_Javascript_C#_Json_Serialization_Highcharts - Fatal编程技术网

Javascript 使用C将函数序列化为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()运行它 这

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

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