最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

How to return a JavaScript 'native' array from a C# method? - Stack Overflow

programmeradmin1浏览0评论

I'm trying to call a C# method from JavaScript by using ActiveXObject:

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

Eventually, arr will contain a SAFEARRAY object, but not JScript array. Is there any way to return native JavaScript object from a C# method?

I'm trying to call a C# method from JavaScript by using ActiveXObject:

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

Eventually, arr will contain a SAFEARRAY object, but not JScript array. Is there any way to return native JavaScript object from a C# method?

Share Improve this question edited Mar 24, 2009 at 10:48 George Stocker 57.9k29 gold badges181 silver badges238 bronze badges asked Mar 15, 2009 at 12:01 Pavel PodlipenskyPavel Podlipensky 8,2695 gold badges45 silver badges54 bronze badges
Add a ment  | 

4 Answers 4

Reset to default 8

You can return a JSON string and then parse into a JavaScript object. There are a number of .NET libraries available to serialize .NET objects into JSON and vice-versa-

  • JSON.NET
  • Microsoft ASP.NET AJAX library
  • JSONSharp

to name a few.

This question and answer may be of use to you

I found the solution by myself, but no documentation exists for this part. The solution is to use JScript.ArrayObject in the following way:

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);

After that you will be able to use the _lastField array in JavaScript like a native array:

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

You may return delimited Joined String in C# and can split into JavaScript

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

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

Via VBArray it can work like this:

  1. Return object[] from C# (declare so in the dispinterface).

  2. To get a native JS array in JScript use VBArray:

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

Background information:

  • JScript supports SafeArrays of Variants only http://blogs.msdn./b/jaiprakash/archive/2007/01/09/jscript-supports-safearrays-of-variants-only.aspx

  • Eric's Complete Guide To Type Signatures Of Scriptable Object Models http://blogs.msdn./b/ericlippert/archive/2004/07/14/183241.aspx

发布评论

评论列表(0)

  1. 暂无评论