Сериализация функции в качестве параметра в json с использованием C # - PullRequest
4 голосов
/ 12 июля 2011

Я пытаюсь создать json, необходимый для создания объекта в jQuery с использованием C #. 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), поэтому, к сожалению, я не могу избежать проблемы

Ответы [ 3 ]

5 голосов
/ 12 июля 2011

из определения формата JSON здесь http://json.org/ ясно, что вы не можете иметь функции в JSON.

определите вашу функцию в другом месте приложения и вызовите ее явно.

любой вид взлома для поддержки функций в JSON является плохой практикой, поскольку он противоречит цели JSON как «облегченного формата обмена данными». Вы не можете обмениваться функциями, так как они не могут быть поняты ничем иным, кроме JavaScript.

5 голосов
/ 29 мая 2013

Я пытался сделать что-то подобное.В моем случае я использовал синтаксис 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; }}

Post: Как сериализовать функцию в json (используя бритву @ )

0 голосов
/ 12 июля 2011

Формат JSON не может представлять такие функции (напрямую).Вы можете закодировать его в виде строки, а затем явно создать функцию в клиенте или передать имя функции, которая уже присутствует в клиенте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...