1. 程式人生 > >C#中解析javascript程式碼

C#中解析javascript程式碼

先上程式碼:

  該類需要你新增對程式集 Microsoft.JScript 的引用;如果把“current version with JScriptCodeProvider” 部分程式碼替換為“deprecated version with Vsa”部分程式碼,你還需要新增對程式集 Microsoft.Vsa 的引用。

  程式碼段末尾註釋掉的部分是用 Microsoft.JScript.Vsa.VsaEngine 作為指令碼引擎來完成 Evaluate 工作;但 VsaEngine (包括其所實現的 IVsaEngine 介面)在 .NET Framework 2.0 中已經被 deprecated ,所以如果你在新版本下編譯的話,會得到如下的警告資訊:“Microsoft.JScript.Vsa.VsaEngine”已過時:“Use of this type is not recommended because it is being deprecated in Visual Studio 2005; there will be no replacement for this feature. Please see the

ICodeCompiler documentation for additional help.”

  這樣的 Evaluate 方法一個顯而易見的用途就是解析 JSON 資料。 JSON 的資料格式實際上是 JavaScript 物件定義語法的子集,所以使用這個 Framework 所提供的指令碼引擎來解析得到的 JSON 格式的資料就比自己寫一個 Parser 來的輕鬆得多。比如:

  1. string jsStr =    
  2. "( {'timeString':'Time is: ' + new Date(),'dateValue':new Date()} )";   
  3. Microsoft.JScript.JSObject obj =    
  4.     (Microsoft.JScript.JSObject) JSEvaluator.EvalToObject(jsStr);   
  5. MessageBox.Show(obj["timeString"].ToString());   
  6. MessageBox.Show(obj["dateValue"].ToString());   
  7. Microsoft.JScript.DateObject tmpV =    
  8.     (Microsoft.JScript.DateObject)obj["dateValue"];   
  9. DateTime dt =    
  10.     (DateTime) Microsoft.JScript.Convert.Coerce(tmpV, 
    typeof(DateTime));   
  11. MessageBox.Show(dt.ToString());  

只需要得到一個 JSObject ,就可以通過物件的 key 名訪問到每一個變數。