2009-03-15 4 views
7

Я пытаюсь вызвать метод C# из JavaScript с помощью ActiveXObject:Как вернуть собственный массив JavaScript из C#?

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

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

ответ

5

Я нашел решение самостоятельно, но никакой документации не существует для этой части. Решение использовать 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]); 
+2

Я был бы очень осторожен в этом. Вполне вероятно, что MS передаст вам проблемы с xbrowser с учетом «JScript» и ActiveX. Подход JSON будет более гибким и надежным imho. – annakata

8

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

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

Это question and answer может быть полезна для вас

+0

Нет, это не так. Я знаю, что подобное возможно и действительно было сделано моим коллегой с помощью C++, но я не знаком с этим, поэтому я хочу знать, как это сделать, используя C#. –

0

Via VBArray он может работать как это:

  1. Обратный объект [] из C# (объявите его в разделителе).

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

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

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

0

Вы можете return delimited Joined String в C# и может разделить на JavaScript

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

//Javascript 
var arrstring = objActiveX.getArryString().split(','); 
Смежные вопросы