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

Jor*_*ork 4 javascript c# serialization json highcharts

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

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

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

public class JSObj {
    public string title { get; set; }
    public int upperVal { get; set; }
    public int lowerVal { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这适用于前几个属性,但我不知道如何返回正确的鼠标悬停功能.

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

key*_*one 5

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

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

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


rya*_*yan 5

我试图完成类似的事情.在我的情况下,我使用MVC Razor语法尝试使用@ <text>语法生成一个传入函数的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);
Run Code Online (Sandbox Code Playgroud)

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

{"Title":"Test","UpperVal":10,"LowerVal":4,"MouseOver":function(){ return 6; }}
Run Code Online (Sandbox Code Playgroud)

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


Poi*_*nty 0

JSON 格式无法(直接)表示类似的函数。您可以将其编码为字符串,然后在客户端中显式实例化该函数,或者传递客户端中已存在的函数的名称。