簡體   English   中英

使用 C# 將 function 序列化為 json 中的參數

[英]Serializing a function as a parameter in json using C#

我正在嘗試使用 ZD7EFA19FBE7D3972FD5ADB6024223D7 在 jQuery 中創建 object 所需的 json。 所需的 json 是

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

前幾個元素很簡單。 我創建了一個 class 來代表 object,JSObj,然后通過 JavascriptSerializer.Serialize() 運行它

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

這適用於前幾個屬性,但我不知道如何返回正確的鼠標懸停 function。

編輯:提供的代碼只是示例代碼,因為我實際使用的 json 的結構有點復雜。 I'm using HighCharts, and one of the config options that I really need to use requires a function, even though they are not really valid json ( http://www.highcharts.com/ref/#tooltip--formatter ) so不幸的是我無法避免這個問題

我試圖完成類似的事情。 在我的情況下,我正在使用 MVC Razor 語法嘗試生成 json object 和 ZC1C425268E6885D1AB666Z 在使用語法中傳遞的 ZC1C425268E61@<794D1AB50741C。

我能夠使用 Json.net 庫(使用 JsonConvert 和 JRaw)獲得所需的 output。 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 object 和 function (而不是字符串中的 ZC1C425268E68385D1ABZ50741)。

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

帖子: 如何將 function 序列化為 json(使用 razor @<text>)

從 JSON 格式定義在這里http://json.org/很明顯你不能在 JSON 中擁有功能。

在應用程序的其他地方定義您的 function 並明確調用它。

任何支持 JSON 中的功能的 hack 都是不好的做法,因為它與 JSON 作為“輕量級數據交換格式”的目的相沖突。 您不能互換功能,因為除了 javascript 之外的任何其他東西都無法理解它們。

JSON 格式不能(直接)表示這樣的功能。 您可以將其編碼為字符串,然后在客戶端中顯式實例化 function,或者傳遞客戶端中已經存在的 function 的名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM