7

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

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

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

4

4 回答 4

8

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

仅举几例。

这个问题和答案可能对你有用

于 2009-03-15T12:07:49.550 回答
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]);
于 2009-03-16T09:08:15.963 回答
1

您可以在 C# 中返回分隔的连接字符串,并可以拆分为 JavaScript

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

//Javascript
var arrstring = objActiveX.getArryString().split(',');
于 2016-05-03T07:31:20.240 回答
0

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

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

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

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

背景资料:

于 2014-10-07T15:18:23.660 回答