Подобно этому Как Вернуть ли я массив строк из объекта 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;
 }

Это выводит "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;
  }

Я пробовал возвращать как массивы объектов, так и массивы строк, но безрезультатно.

3
Petey B 28 Июл 2010 в 19:35

2 ответа

Лучший ответ

Вы можете попробовать сериализовать свои данные в json и десериализовать их на клиенте. jQuery имеет встроенные функции json. Я сделал это с более сложными объектами, но не со строковыми массивами, хотя готов поспорить, что это будет работать так же легко.

2
ctorx 27 Май 2011 в 14:55

Вы можете отправить массив JavaScript прямо из вашего метода activeX, ваша функция будет:

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

Добавление ссылки на Microsoft.JScript в ваш проект.


MSDN: ArrayConstructor.ConstructArray Метод

3
Stephen Kennedy 18 Мар 2018 в 16:13