将 js 对象传递给 C# 函数

gjvdkamp

我正在尝试 Jint 并希望实现从 js 使用的fetch api 。第二个参数是一个嵌套的js对象,传入:

fetch('https://example.com', {
  method: 'post', 
  headers : {
    authorization : 'xyz'
  }
});

C# 函数传入的签名是什么?我试过了

 private static string Fetch(string uri, object init) 

首先,看到 Jint 传入了一个 ExpandoObject,我做了这个:

 private static string Fetch(string uri, ExpandoObject init) 

但是 Jint 在内部使用 JsValue 和 ObjectInstance 对象对吗?这些也有更好的语义来解决你传入的是对象或数组等,但这会引发错误:

 private static string Fetch(string uri, ObjectInstance init) 
: 'No valid constructors found'

将这些对象传递给 C# 的推荐方法是什么?我希望应用程序的 js 和 C# 端之间的摩擦尽可能少,因为我将来回进行相当多的调用(这就是为什么我正在寻找来自 ClearScript 的 Jint)

新乡

一些选择:

  • JsValue

    对象按原样传递。

    您不能使用任何其他派生类型,因为 jint 只检查JsValue. 要使用ObjectInstance,请将其投射到 C# 端。

  • dynamic

    这相当于ExpandoObject.

    如果参数类型不是, Jint 会将 an 转换ObjectInstance为first ExpandoObjectJsValue

  • IDictionary<string,object>或任何其他实现的通用接口ExpandoObject

    与 相同dynamic

  • A custom type输入对象能够转换为。

    您可以将对象定义为类或结构,并将条目定义为字段或属性。成员的名字可以大写。请注意,这种方式使用反射,因此效率不高。

    例如,您可以这样定义它:

    struct Header
    {
        public string authorization;
    }
    
    class Init
    {
        public string Method { get; set; }
        public Header Headers { get; set; }
    }
    
  • object

    总是有效。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章