views:

1077

answers:

2

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?

+4  A: 

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-

to name a few.

This question and answer may be of use to you

Russ Cam
No, this is not the case. I know that similar possible and actually was done by my colleague by using C++, but I'm not familiar with that, so I wish to know how can I do it by using C#.
Paul Podlipensky
+1  A: 

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]);
Paul Podlipensky
I would be extremely wary of this. It's quite likely MS are going to hand you xbrowser issues given the "JScript" and the ActiveX. The JSON approach is going to be more flexible and more reliable imho.
annakata