Jint, как получить функцию JavaScript, переданную в качестве аргумента в виде строки toString - PullRequest
0 голосов
/ 13 июня 2019

Я искал в Google этот вопрос, и все, что я могу найти, это различные вопросы о том, как вызвать функцию в Jint и т. Д., Но я не смог найти ответов на вопрос о том, как получить функцию JavaScript в виде строки.в Jint.

Например, скажем, у меня есть следующая функция C # в классе:

public static string StringifyJsFunction(Func<JsValue, JsValue[], JsValue> /*or possible just JsValue as the type, not sure if that would be easier*/ inputFunction) {
    return  somehowTurnFunctionIntoJsString(inputFunction);
}

, а затем на стороне JavaScript (чей код должен быть проанализирован с помощью Jint Engine):

importNamespace("something").SomeClass.StringifyJsFunction(function() {
     console.log("hi");
/*other JavaScript code */
});

, а затем теоретически это должно вернуть строку ( из метода C #):

`
    function() {
         console.log("hi");
         /*other JavaScript code */
    }
`

, очевидно, на самой стороне JavaScript я могу просто вызвать (function () {}). toString (), но я хочу получить строку на стороне C # для хранения в базе данных и по другим причинам и т. д. ...

, очевидно, что текущий аргумент имеет видтипа Func (который является типом по умолчанию, автоматически конвертируемым из Jint и передаваемым в функцию C #), я не думаю, что можно просто вызвать .toString () (в нижнем регистре «to»), чтобы получить код функции JavaScript, так какэто яТеперь это функция C #, но, может быть, если бы это было JsValue, я мог бы вызвать inputFunction.Get ("toString"). Call (), но все же это не совсем работает, как и ожидалось - я хочу иметь возможность получитьтот же результат, как если бы я вызывал .toString () для фактической функции JavaScript, но в C #.

В Jint должен быть какой-то встроенный способ доступа к исходным методам JavaScript, связанным с конкретным JsValue,в отличие от просто вынуждены работать с новым значением C #?Имеется в виду, как я могу вызвать оригинальные методы JavaScript объекта Jint?

Очевидно, также, если бы я знал имя функции, то есть если она была объявлена ​​заранее, то я мог бы сделать что-то вроде:

var funcString = engine.GetValue("myFunction.toString()");

но я хочу иметь возможность получить toString функции при ее передаче в функцию / класс C #.

SO:

Как я могуполучить функцию JavaScript в виде строки (как в .toString () (строчная буква «t») через аргумент функции C #, переданный в метод (или определение класса), из JavaScript в C # через Jint?

...