使用c#在json中序列化一个函数作为参数

本文关键字:一个 函数 参数 json 序列化 使用 | 更新日期: 2023-09-27 18:01:54

我正在尝试创建使用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; }
}

这对于前几个属性来说工作得很好,但是我不知道如何返回正确的鼠标悬停函数。

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

使用c#在json中序列化一个函数作为参数

我试图完成类似的事情。在我的情况下,我使用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格式定义这里http://json.org/很明显,你不能在JSON中有函数。

在应用程序的其他地方定义函数并显式调用。

任何在JSON中支持函数的hack都是不好的做法,因为它与JSON作为"轻量级数据交换格式"的目的相冲突。你不能交换函数,因为它们不能被javascript理解。

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