前一阵子使用C#编写SCXML状态机,需要解析EMCScript表达式,使用了Jint库(https://github.com/sebastienros/jint/),当时感觉与C#之间的数据转换不是很方便。这两天有时间又关注了一下,发现新的3.0版本有了很大改进,在这里介绍给大家,供参考。
首先要安装nuget包,注意增加prerelease选项,安装最新的版本,使用dotnet命令行指令如下:
1
|
dotnet add package Jint --prerelease |
直接计算表达式:
1
2
3
|
Console.WriteLine( "直接计算表达式:(1+2)*3" ); var r1= e.Evaluate( "(1+2)*3" ); Console.WriteLine(r1); |
字符串操作:
1
2
3
4
5
6
7
8
|
Console.WriteLine( "字符串操作:'abc'.length" ); var r2=e.Evaluate( "'abc'.length" ); Console.WriteLine(r2); Console.WriteLine( "-----------------------" ); Console.WriteLine( "字符串操作:'abc'.substr(2)" ); var r3=e.Evaluate( "'abc'.substr(2)" ); Console.WriteLine(r3); |
可以使用SetValue给JS变量赋值:
1
2
3
4
5
|
var e2 = new Engine() .SetValue( "x" , 1) .SetValue( "y" ,2); var r4=e2.Evaluate( "x+y" ); Console.WriteLine(r4); |
可以使用对象进行C#和JS之间的数据交换:
1
2
3
4
5
6
7
8
|
var myobj= new Student { Name= "张三" }; Console.WriteLine(myobj.Name); var e4 = new Engine() .SetValue( "student" , myobj) .Execute( "student.Name = '李四'" ); Console.WriteLine(myobj.Name); |
可以将C#函数委托给JS引擎,在JS代码中调用这些函数:
1
2
3
4
5
6
7
8
9
10
|
Console.Write( "将CSharp函数设置给Js引擎" ); var engine = new Engine() .SetValue( "log" , new Action< object >(Console.WriteLine)); engine.Execute( @" function hello() { log('Hello World'); }; hello(); " ); |
也可以从CSharp 调用JS的函数:
1
2
3
4
|
Console.WriteLine( "调用JS函数计算BMI" ); var e5= new Engine() .Execute( "function bmi(weight, height) { return weight/height/height; }" ); Console.WriteLine(e5.Invoke( "bmi" ,75,1.75)); |
可以引入CLI,从而在JS引擎中调用CLI中的函数:
1
2
3
4
5
|
Console.WriteLine( "调用.Net函数写入文件" ); var e6 = new Engine(cfg => cfg.AllowClr()); e6.Execute(@ "var f=System.IO.StreamWriter('sayhello.log'); f.WriteLine('你好 !'); f.Dispose();" ); |
示例可以从github下载:https://github.com/zhenl/CSharpScriptDemo,本文示例在JSInCSharp项目中。
到此这篇关于C# 执行Javascript脚本的方法步骤的文章就介绍到这了,更多相关C# 执行Javascript脚本内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://www.cnblogs.com/zhenl/p/15756305.html