将 js 对象传递给 C# 函数

Pass js object to C# function

我正在试用 Jint 并希望实现 fetch api 以便从 js 使用。第二个参数是传入的嵌套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

    如果参数类型不是 JsValue.

    ,Jint 将首先将 ObjectInstance 转换为 ExpandoObject
  • IDictionary<string,object>ExpandoObject 实现的任何其他 通用 接口

    dynamic相同。

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

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

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

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

    始终有效。