Как вернуть «родной» массив JavaScript из метода C#?
-
22-07-2019 - |
Вопрос
Я пытаюсь вызвать метод С# из JavaScript, используя ActiveXObject
:
var myobj = new ActiveXObject('myobject');
var arr = myobj.GetArray();
В конце концов, arr
будет содержать SAFEARRAY
объект, но не JScript
множество.Есть ли способ вернуть собственный объект JavaScript из метода С#?
Решение 2
Я нашел решение самостоятельно, но документации для этой части не существует.
Решение состоит в том, чтобы использовать 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]);
Другие советы
Вы можете вернуть JSON строку, а затем проанализировать ее в объект JavaScript.Существует ряд .NET-библиотек для сериализации объектов .NET в JSON и наоборот.
назвать несколько.
Этот вопрос и ответ может быть вам полезен
Вы можете вернуть разделенную объединенную строку в C # и можно разбить на JavaScript
//C#
public string getArryString()
{
string[] arrstring = new string[]{"1","2","3"};
return string.Join(",", arrstring);
}
//Javascript
var arrstring = objActiveX.getArryString().split(',');
Через VBArray это может работать так:
Верните объект[] из C# (объявьте это в интерфейсе dispinterface).
Чтобы получить собственный массив JS в JScript, используйте VBArray:
var jsArray = new VBArray(myobj.GetArray()).toArray(); for (i = 0; i < jsArray.length; i++) { // use jsArray[i] }
Исходная информация:
JScript поддерживает только SafeArrays of Variants.http://blogs.msdn.com/b/jaiprakash/archive/2007/01/09/jscript-supports-safearrays-of-variants-only.aspx
Полное руководство Эрика по вводу сигнатур объектных моделей, допускающих сценарииhttp://blogs.msdn.com/b/ericlippert/archive/2004/07/14/183241.aspx