Silverlight调用的JS方法返回对象数组的处理方法

Silverlight调用的JS方法返回对象数组的处理方法,第1张

概述http://www.cnblogs.com/sosowjb/archive/2012/06/02/2532237.html 最近在做Silverlight应用,需要用Silverlight调用页面中Javascript方法。这个JS方法返回一个对象数组给Silverlight。对于这个对象数组怎么在Silverlight里处理这个问题纠结了一阵子,通过搜索,在微软开发者社区里找到了方法。 测试用

http://www.cnblogs.com/sosowjb/archive/2012/06/02/2532237.HTML

最近在做Silverlight应用,需要用Silverlight调用页面中JavaScript方法。这个Js方法返回一个对象数组给Silverlight。对于这个对象数组怎么在Silverlight里处理这个问题纠结了一阵子,通过搜索,在微软开发者社区里找到了方法。

测试用的Js方法如下:

   1: function test() {
   2:     var testObjectCollection = [];
   3:     for (var i = 0; i < 10; i++) {
   4:         var testObject = new Object();
   5:         testObject.FIEld1 = "FIEld1_" + i;
   6:         testObject.FIEld2 = "FIEld2_" + i;
   7:         testObjectCollection[testObjectCollection.length] = testObject;
   8:     }
   9:     return testObjectCollection;
  10: };

代码中设计了一个对象testObject,对象包含两个属性FIEld1和FIEld2。因此会很容易想到在Silverlight也创建一个结构相同的类:

public class TestObject
   2: {
string FIEld1 { get; set; }
   4:     string FIEld2 { get; set; }
   5: }

准备工作到这里结束。

 

在Silverlight里调用Js方法的代码如下:

object returnedValue = HTMLPage.Window.Invoke("test",null);

第一个参数是Js方法名,第二个参数是params object[]类型的,是Js方法的参数列表。Invoke方法返回值的是object类型,很容易想到会用下面的方法转换:

1: List<TestObject> testObjectCollection = returnedValue as List<TestObject>;

但是会发现testObjectCollection变量是null,而returnedValue并不为null,转换失败了。

 

通过调试发现,returnedValue类型为System.windows.browser.ScriptObject,也就是说Invoke方法返回值实际上是不单纯是个object,而是ScriptObject。ScriptObject类有个ConvertTo方法可以用来转换。关于System.windows.browser.ScriptObject类型详细信息,可以去查MSDN。

于是我尝试如下方法:

1: ScriptObject returnedValue = HTMLPage.Window.Invoke("test",255)">null) as ScriptObject;
   2: List<TestObject> objects = returnedValue.ConvertTo<List<TestObject>>();

调试结果如下:

很明显,转换成功了。

剩下的事情就是按业务需求来处理了。

总结

以上是内存溢出为你收集整理的Silverlight调用的JS方法返回对象数组的处理方法全部内容,希望文章能够帮你解决Silverlight调用的JS方法返回对象数组的处理方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1020540.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-23
下一篇2022-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存