遍历作为参数传递给宿主函数的 JS 对象到字典中

Iterate through JS object passed as parameter to host function into a dictionary

如何将传递到主机 C# 方法的 JS 对象转换为名称和值对的字典?我的问题是如何解释在 exec 函数中接收到的“对象”。如果他们是 int,我可以使用...

foreach (int i in args)...

...但是他们是...什么?

例如,在一个 JS 文件中我有

  myApi.exec("doThang", { dog: "Rover", cat: "Purdy", mouse: "Mini", <non-specific list of more...> } );

在 C# 中我有

public void foo()
{
  var engine = new V8ScriptEngine();
  engine.AddHostObject("myApi", a);  // see below

  // load the above JS
  string script = loadScript();

  // execute that script
  engine.Execute(script);

}

public class a 
{
  public void exec(string name, params object[] args){

  // - how to iterate the args and create say a dictionary of key value pairs? 

  }
}

编辑:更改了问题的具体内容,因为我知道 'params' 关键字不是 ClearScript 的特定部分。

您可以使用 ScriptObject。脚本对象可以有索引属性和命名属性,所以你可以创建两个字典:

public void exec(string name, ScriptObject args) {
    var namedProps = new Dictionary<string, object>();
    foreach (var name in args.PropertyNames) {
        namedProps.Add(name, args[name]);
    }
    var indexedProps = new Dictionary<int, object>();
    foreach (var index in args.PropertyIndices) {
        indexedProps.Add(index, args[index]);
    }
    Console.WriteLine(namedProps.Count);
    Console.WriteLine(indexedProps.Count);
}

如果您不期望或不关心索引属性,可以跳过 indexedProps。或者您可以构建一个 Dictionary<object, object> 实例来容纳两者。