¿Cómo devolver una matriz 'nativa' de JavaScript desde un método C #?
-
22-07-2019 - |
Pregunta
Estoy intentando llamar a un método C # desde JavaScript usando ActiveXObject
:
var myobj = new ActiveXObject('myobject');
var arr = myobj.GetArray();
Eventualmente, arr
contendrá un objeto SAFEARRAY
, pero no una matriz JScript
. ¿Hay alguna forma de devolver un objeto JavaScript nativo de un método C #?
Solución 2
Encontré la solución por mí mismo, pero no existe documentación para esta parte.
La solución es usar JScript.ArrayObject
de la siguiente manera:
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);
Después de eso, podrá utilizar la matriz _lastField
en JavaScript como una matriz nativa:
var myobj = new ActiveXObject('myobject');
var arr = myobj.LastField;
alert(arr[1]);
Otros consejos
Puede devolver una JSON y luego analizar en un objeto JavaScript. Hay varias bibliotecas .NET disponibles para serializar objetos .NET en JSON y viceversa-
por nombrar algunos.
Esta pregunta y respuesta puede ser de utilizar para usted
Puede devolver una cadena unida delimitada en C # y puede dividirse en JavaScript
//C#
public string getArryString()
{
string[] arrstring = new string[]{"1","2","3"};
return string.Join(",", arrstring);
}
//Javascript
var arrstring = objActiveX.getArryString().split(',');
A través de VBArray puede funcionar así:
-
Devuelve el objeto [] de C # (declararlo en la interfaz)
-
Para obtener una matriz JS nativa en JScript, use VBArray:
var jsArray = new VBArray(myobj.GetArray()).toArray(); for (i = 0; i < jsArray.length; i++) { // use jsArray[i] }
Información general:
-
JScript solo admite SafeArrays of Variants http: / /blogs.msdn.com/b/jaiprakash/archive/2007/01/09/jscript-supports-safearrays-of-variants-only.aspx
-
La guía completa de Eric para escribir firmas de modelos de objetos programables http://blogs.msdn.com/b/ericlippert /archive/2004/07/14/183241.aspx