如何从C#方法返回JavaScript“本机”数组?

时间:2009-03-15 12:01:01

标签: c# javascript interop com-interop

我正在尝试使用ActiveXObject来调用JavaScript中的C#方法:

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

最终,arr将包含SAFEARRAY个对象,但不包含JScript数组。有没有办法从C#方法返回本机JavaScript对象?

4 个答案:

答案 0 :(得分:8)

您可以返回JSON字符串,然后解析为JavaScript对象。有许多.NET库可用于将.NET对象序列化为JSON,反之亦然 -

仅举几例。

question and answer可能对您有用

答案 1 :(得分: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);

之后,您将能够在JavaScript中使用_lastField数组,就像本机数组一样:

var myobj = new ActiveXObject('myobject');
var arr = myobj.LastField;
alert(arr[1]);

答案 2 :(得分:1)

您可以在C#中return delimited Joined String并可以拆分为JavaScript

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

//Javascript
var arrstring = objActiveX.getArryString().split(',');

答案 3 :(得分:0)

通过VBArray它可以像这样工作:

  1. 从C#返回对象[](在dispinterface中声明)。

  2. 要在JScript中获取本机JS数组,请使用VBArray:

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