使用COM互操作将数组从JS返回到C#

使用COM互操作将数组从JS返回到C#,c#,javascript,com,com-interop,C#,Javascript,Com,Com Interop,我通过COM互操作和WebBrowser WPF控件将一些数据从JavaScript代码返回到C代码。我已经成功地返回了Javascript中如下所示的数据: var result = new Array(); result[0] = cbCamera.selectedItem; result[1] = cbMicrophone.selectedItem; 现在我有了C#中的对象结果,它如下所示: result.GetType(); {Name = "__ComObject" FullN

我通过COM互操作和WebBrowser WPF控件将一些数据从JavaScript代码返回到C代码。我已经成功地返回了Javascript中如下所示的数据:

var result = new Array(); 
result[0] = cbCamera.selectedItem; 
result[1] = cbMicrophone.selectedItem;
现在我有了C#中的对象结果,它如下所示:

result.GetType(); 
{Name = "__ComObject" FullName = "System.__ComObject"}

如何获取此ComObject中的数组中包含的javascript字符串?

要查找rutime可调用包装(System.\u ComObject)中包含的对象的底层类型,请使用refection。然后,您将能够根据此信息创建或强制转换为托管类型

比如,

string type = (string)result.GetType().InvokeMember("getType",
BindingFlags.InvokeMethod, null, result, null);
或者,您可以使用invokeMember来检索这些值。例如,您可以调用valueOf方法将数组转换为最有意义的原语值,或者调用toString将数组转换为csv字符串

string result = (string)result.GetType().InvokeMember("toString",
BindingFlags.InvokeMethod, null, result, null);
string[] jsArray = result.Split(',');
// c# jsArray[n] = js result[n] 
编辑:在c#4.0中实现这一点的第三种方法是使用新的动态类型。动态类型使对COM对象进行后期绑定调用变得非常容易

string csv = ((dynamic)result).toString();