使用COM-Interop将数组从JS返回到C#

时间:2009-04-03 09:07:02

标签: c# javascript com com-interop

我通过COM Interop和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字符串?

1 个答案:

答案 0 :(得分:3)

要查找rutime可调用包装器(System .__ 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();