如何从C#方法返回一个JavaScript“原生”数组?

7

我正在尝试使用ActiveXObject从JavaScript调用C#方法:

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

最终,arr将包含一个SAFEARRAY对象,而不是JScript数组。有没有办法从C#方法返回原生JavaScript对象?

4个回答

8

不,情况并非如此。我知道我的同事用 C++ 做过类似的事情,但我对 C++ 不熟悉,所以希望知道如何使用 C# 完成这个任务。 - Pavel Podlipensky

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
我会对此非常警惕。鉴于“JScript”和ActiveX,微软很可能会给你带来跨浏览器问题。在我看来,采用JSON方法会更灵活、更可靠。 - annakata

1
你可以在C#中返回分隔符连接的字符串,并且可以在JavaScript中进行拆分。
//C#
public string getArryString()
{
string[] arrstring = new string[]{"1","2","3"};
return string.Join(",", arrstring);
}

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

0

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

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

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

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

背景信息:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接