c# - 如何使用 C# 运行 jscript 并返回数组中的值?

标签 c# javascript .net

好吧,我在 javascript 中有很多变量需要获取值(我从其他页面获取的值)。 最好的方法是什么? 我正在使用 Microsoft.Jscript 类,您的方法有效。

我写了下面的代码:

    static Dictionary<string, string> ParseVariables(string code)
        {

            string[] variables = code.Split(';');
            Dictionary<string, string> variablesValues = new Dictionary<string, string>();
            for (int i = 0, len = variables.Length - 1; i < len; i++)
            {
                string vvar = variables[i];
                string varName = Regex.Replace(vvar.Split('=')[0], @"^\s*var\s*", string.Empty).Trim();
                var compiler = Compile(vvar);                
               string varValue = compiler.ToString();
                variablesValues.Add(varName, varValue);
            }

            return variablesValues;

        }        


static object Compile(string JSource)
        {
            return Microsoft.JScript.Eval.JScriptEvaluate(JSource, Microsoft.JScript.Vsa.VsaEngine.CreateEngine());
        }

这在某些情况下效果很好,例如:

var jscript = "var x = 'foo'; var y = 'baa';"; 
var output = ParseVariables(jscript); 
var val = output["y"]; //baa 
var val2 = output["x"]; //foo

但是对于这样的情况:

var jscript = "var x = {}; x['foo'] = 'baa'; x['baa'] = 'test';"; 
var output = ParseVariables(jscript); 
var val = output["x['foo']"]; //not works 

我该怎么做?任何帮助表示赞赏!谢谢!

最佳答案

由于您的方法是将 JScript 源代码分成由分号 (;) 分隔的 block ,因此只有 var; 之间的部分将使用您的 Compile 方法进行编译.

如果将 JScript 源代码更改为 var x = { "foo": "baa", "baa": "test"};,Compile 方法将正常工作,并且它将返回一个 ScriptObject 对象。

但是,还有另一个错误 - 在将值插入生成的字典之前,您使用了 ToString

试试这个以朝着更好的方向开始:

将 Compile 方法更改为返回 ScriptObject,如下所示:

static ScriptObject Compile(string JSource)
{
    return (ScriptObject)Microsoft.JScript.Eval.JScriptEvaluate(JSource, Microsoft.JScript.Vsa.VsaEngine.CreateEngine());
}

然后试试这个:

var x = Compile("var x = { foo: 'baa', bar: { 'nisse': 'kalle' } };");

var foo = x["foo"];
var bar = (ScriptObject)x["bar"];
var nisse = bar["nisse"];

关于c# - 如何使用 C# 运行 jscript 并返回数组中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7707857/

相关文章:

ASP.NET linkbutton 引发 onBeforeUnload 事件两次

.net - Azure逻辑应用程序运行历史记录和触发器历史记录

c# - ObservableList ReadOny 数据网格

c# - 如何以编程方式将俄语音译为英语?

c# - Entity Framework - 以多列索引作为标识符的种子 AddOrUpdate

javascript - Flask 模板中的动态 HTML 转义

javascript - GXT 不工作

.net - 将字典从一种类型转换为另一种类型

c# - 事件优先级和流程顺序

c# - 使用特定机器对域进行身份验证?