将数组从C#COM对象传递给JavaScript?

与此类似如何将一个字符串数组从ActiveX对象返回到JScript但在C#中。

我有一个COM控件,将一个字符串数组传递给javascript。 似乎javascript无法理解它是什么我传回来并且javascript中的数组总是未定义的。

使用Javascript:

try { keystore.openKeyStore("MY", true, false); var fNames = new Array(); fNames = keystore.getAllFriendlyNames(); document.getElementById('par').innerHTML = fNames[0]; } catch(err) { document.getElementById('err').innerHTML = err.description; } 

这为fNames[0];输出’undefined’ fNames[0];

C#:

  public object[] getAllFriendlyNames() { if (!keystoreInitialized) throw new Exception("Key store has not been initialized"); X509Certificate2Collection allCerts = certificateStore.Certificates; int storeSize = allCerts.Count; if (storeSize == 0) throw new Exception("Empty Key Store, could have opened using the wrong keystore name."); object[] friendlyNames = new object[storeSize]; for (int i = 0; i < storeSize; i++) { string friendlyName = allCerts[i].FriendlyName; if (friendlyName == "") friendlyName = allCerts[i].Subject; friendlyNames[i] = (object) friendlyName; } return friendlyNames; } 

我试过返回对象数组和字符串数组无济于事。

您可以尝试将数据序列化为json并在客户端上反序列化。 jQuery内置了json函数。 我已经用更复杂的对象完成了这个,但不是用字符串数组,尽管我敢打赌它会很容易地工作。

您可以直接从您的activeX方法发送JavaScript数组,您的函数将是:

 public ArrayObject getAllFriendlyNames() { //.... the same ...... return Microsoft.JScript.GlobalObject.Array.ConstructArray(friendlyNames); } 

将Microsoft.JScript引用添加到项目中。


MSDN: ArrayConstructor.ConstructArray方法