javascript - Edge.js 从 Expandoobject 转换为字符串

标签 javascript c# node.js expandoobject edgejs

我正在尝试使用 Tomasz Janczuk 很棒的 Edgejs 库从第 3 方 DLL 调用函数。根据我收到的错误消息,代码可能会也可能不会返回信息。我收到的错误消息(见下文)表示代码需要一个字符串,但返回的是 ExpandoObject。我根据edgejs github页面上的示例尝试了此代码的几个不同版本,但它们都返回相同的错误。该错误表明这只是将 Expandoobject 转换为字符串的问题,但到目前为止我还没有成功。任何有关此问题的帮助将不胜感激。我一直在努力让它发挥作用,时间比我愿意承认的还要长。

代码基于 110_clr_instance.js示例位于edgejs github:

var edge = require('edge');

var createSerial = edge.func({
    source: {/*
    using System;
    using System.Threading.Tasks;

    public class Startup
    {
        public async Task<object> Invoke(string location)
        {
            var serial = new Serial(location);
            return new {
                validateLocation = (Func<object,Task<object>>)(
                    async (location) =>
                    { 
                        serial.ValidateLocation((string)location);
                        return serial.IsValid;
                    }
                )
            };
        }
    }

    public class Serial
    {
        public static Connection conn = new Connection("https://companyname.moraware.net/companyname/api.aspx", "username", "password");
        public bool IsValid { get; private set; }

        public Serial(bool isValid)
        {
            this.IsValid = isValid;
        }

        public void ValidateLocation(string location)
        {
         conn.AutoRefreshOnTimeout = true;
         if (!conn.Connected) { conn.Connect(); }
            this.IsValid = conn.GetInventoryLocations().Any(x => x.InventoryLocationName == location);
         if (conn.Connected) { conn.Disconnect(); }
        }
    }    */},
    references: ['JobTrackerAPI4.dll','Newtonsoft.Json.dll']

    });

var serial = createSerial("A01-01", true);
console.log(serial.validateLocation(null, true));

控制台错误输出:

C:\Users\csnow\NodeApps\MarshallDataEdge\node_modules\edge\lib\edge.js:161
return edge.initializeClrFunc(options);
            ^
Error: Unable to cast object of type 'System.Dynamic.ExpandoObject' to type 'System.String'.
    at Error (native)
    at Object.exports.func (C:\Users\csnow\NodeApps\MarshallDataEdge\node_modules\edge\lib\edge.js:161:17)
    at Object.<anonymous> (C:\Users\csnow\NodeApps\MarshallDataEdge\Evolveware_clr_instance.js:5:25)
    at Module._compile (module.js:413:34)
    at Object.Module._extensions..js (module.js:422:10)
    at Module.load (module.js:357:32)
    at Function.Module._load (module.js:314:12)
    at Function.Module.runMain (module.js:447:10)
    at startup (node.js:146:18)
    at node.js:404:3

Process finished with exit code 1

但是后来我使用 webstorm 逐步浏览了代码,并从 Edge.js 中发现了这个错误。 ReferenceError:选项未定义

edgejs_clr_instance_error

最佳答案

将 C# 文字传递给 edge.func 的方式缺少 function () {...} 包装器。应该是:

edge.func({
  source: function () {/*
    // C# code goes here
  */},
  ...
});

而不是

edge.func({
  source: {/*
    // C# code goes here
  */},
  ...
});

关于javascript - Edge.js 从 Expandoobject 转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41128170/

相关文章:

javascript - 如何让 react-native Picker 停留在新选择的选项上?

C# - 关于类和内存

node.js - 自定义记录器和 Socket.io 1.x

node.js - 关闭并重新打开终端后如何访问正在运行的nodemon脚本?

javascript - puppeteer 操纵者在样式属性中转义双引号

javascript - 只替换整个单词,而不是单词

javascript - 将数据发送到部分 View

javascript - 尝试迭代并解析 xml 标签并分别显示段落中每个标签内的文本

c# - 获取 C# 类型的 XSD 架构

c# - 在 ASP.Net Datagrid 中隐藏列