簡體   English   中英

如何使用C#運行jscript並返回數組中的值?

[英]How to run a jscript using C# and return the values in an array?

好吧,我在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源代碼拆分為以分號(;)分隔的塊,因此只有var;之間的部分; 將使用您的編譯方法編譯。

如果將JScript源代碼更改為var x = { "foo": "baa", "baa": "test" }; ,Compile方法將正常工作,它將返回一個ScriptObject對象。

但是,還有另一個錯誤 - 在將值插入到生成的Dictionary中之前使用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"];

似乎這里有許多假設。 例如,您將所有值都返回到一行。 您可以嘗試以這種方式設置vvar:

string vvar = variables[i].Trim();

這將刪除不需要的換行符和其他空格。

你可以為你的第二個例子發布compiler.ToString()的輸出嗎? 我猜測問題在於解析,而不是在JScript編譯器中。

此外,在這種情況下會發生什么:

 var foo = 'a'; foo = 'b'; foo = 'c'; 

foo最終會帶來什么價值?

暫無
暫無

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

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