我正在尝试 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 。ExpandoObject
JsValue
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] 删除。
我来说两句