Как вернуть «родной» массив JavaScript из метода C #? - PullRequest
7 голосов
/ 15 марта 2009

Я пытаюсь вызвать метод C # из JavaScript с помощью ActiveXObject:

var myobj = new ActiveXObject('myobject');
var arr = myobj.GetArray();

В конце концов, arr будет содержать объект SAFEARRAY, но не массив JScript. Есть ли способ вернуть нативный объект JavaScript из метода C #?

Ответы [ 4 ]

8 голосов
/ 15 марта 2009

Вы можете вернуть JSON строку и затем проанализировать объект JavaScript. Существует ряд библиотек .NET, доступных для сериализации объектов .NET в JSON и наоборот-

чтобы назвать несколько.

Этот вопрос и ответ могут быть вам полезны

5 голосов
/ 16 марта 2009

Я нашел решение самостоятельно, но документации для этой части не существует. Решение состоит в том, чтобы использовать JScript.ArrayObject следующим образом:

ArrayObject _lastField;
byte[] byteArray = new byte[]{2,1,2,3};
object[] array = new object[byteArray.Length];
byteArray.CopyTo(array, 0);
_lastField = Microsoft.JScript.GlobalObject.Array.ConstructArray(array);

После этого вы сможете использовать массив _lastField в JavaScript как собственный массив:

var myobj = new ActiveXObject('myobject');
var arr = myobj.LastField;
alert(arr[1]);
1 голос
/ 03 мая 2016

Вы можете вернуть разделенную объединенную строку в C # и можете разбить на JavaScript

//C#
public string getArryString()
{
string[] arrstring = new string[]{"1","2","3"};
return string.Join(",", arrstring);
}

//Javascript
var arrstring = objActiveX.getArryString().split(',');
0 голосов
/ 07 октября 2014

Через VBArray это может работать так:

  1. Возврат объекта [] из C # (объявите это в dispinterface).

  2. Чтобы получить собственный JS-массив в JScript, используйте VBArray:

    var jsArray = new VBArray(myobj.GetArray()).toArray();
    for (i = 0; i < jsArray.length; i++) 
    {
       // use jsArray[i]
    }
    

Справочная информация:

...