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

时间:2010-07-28 15:35:09

标签: c# javascript arrays com activex

与此How do I return an array of strings from an ActiveX object to 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'

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;
  }

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

2 个答案:

答案 0 :(得分:3)

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

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

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


MSDN:ArrayConstructor.ConstructArray Method

答案 1 :(得分:2)

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