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
這樣的 Evaluate 方法一個顯而易見的用途就是解析 JSON 資料。 JSON 的資料格式實際上是 JavaScript 物件定義語法的子集,所以使用這個 Framework 所提供的指令碼引擎來解析得到的 JSON 格式的資料就比自己寫一個 Parser 來的輕鬆得多。比如:
- string jsStr =
- "( {'timeString':'Time is: ' + new Date(),'dateValue':new Date()} )";
- Microsoft.JScript.JSObject obj =
- (Microsoft.JScript.JSObject) JSEvaluator.EvalToObject(jsStr);
- MessageBox.Show(obj["timeString"].ToString());
- MessageBox.Show(obj["dateValue"].ToString());
- Microsoft.JScript.DateObject tmpV =
- (Microsoft.JScript.DateObject)obj["dateValue"];
- DateTime dt =
- (DateTime) Microsoft.JScript.Convert.Coerce(tmpV,
- MessageBox.Show(dt.ToString());
只需要得到一個 JSObject ,就可以通過物件的 key 名訪問到每一個變數。