【问题标题】:How to run the java script functions using .net library class?如何使用 .net 库类运行 javascript 函数?
【发布时间】:2018-09-28 12:57:32
【问题描述】:

我有用于计算某些公式的 JavaScript 字符串,但我需要从 C# 执行脚本。

Like JS 公式字符串:

function(params) {
  var itemAmount = 0,
      itemsList = JSON.stringify(params.items),
      billAmount = 0,
      itemDiscountAmount = 0,
      itemDiscountPercentage = 0,
      maxDiscountAmount = 0, 
      maxDiscountPercentage = params.maxDiscountPercentage;
  return {
    billAmount: billAmount,
    maxDiscountPercentage: maxDiscountPercentage,
    maxDiscountAmount: maxDiscountAmount
  };
});

我需要传递参数并使用 C# 获取结果。

【问题讨论】:

  • 另外,我尝试过使用 Microsoft.JScript.Vsa。但在这种情况下,我无法执行 JSON。解析操作
  • 为什么不在c#上写这段代码?
  • @SamvelPetrosov ,其实这个js公式是存储在数据库中的,用来执行各种计算。这将有助于不同的平台
  • 为什么不能在 C# 中执行此操作?假设有充分的理由在 C# 中使用 js,您是否考虑过使用侏罗纪? github.com/paulbartrum/jurassic
  • @lostlain Jurrasic 库非常有用且运行良好。感谢您的建议。

标签: javascript c# .net c#-4.0


【解决方案1】:

也许您正在寻找这样的 JavaScript 引擎:

        var es = JsEngineSwitcher.Instance;
        es.EngineFactories.AddChakraCore();
        es.DefaultEngineName = ChakraCoreJsEngine.EngineName;
        var je = es.CreateDefaultEngine();

        je.EmbedHostType("console", typeof(Console));
        je.Execute("console.WriteLine('HELLO CHAKRA')");

这应该适用于您的:

        je.Execute("function foo(a,b,c){return a+b*c;};");
        je.CallFunction<int>("foo", 1, 2, 3);

https://github.com/Taritsyn/JavaScriptEngineSwitcher

顺便说一句,如果您的代码中需要 JSON,这可能会有所帮助:

https://github.com/douglascrockford/JSON-js

【讨论】:

    【解决方案2】:

    JavaScript 示例没有使用大部分变量,与:

    function(params) {
      return {
        billAmount: 0,
        maxDiscountPercentage: params.maxDiscountPercentage,
        maxDiscountAmount: 0
      };
    });
    

    在 C# 中类似于匿名函数:

    new Func<dynamic, dynamic>(params => new {
        billAmount = 0,
        maxDiscountPercentage = params.maxDiscountPercentage,
        maxDiscountAmount = 0
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-29
      • 1970-01-01
      • 2017-12-17
      • 2018-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多