Silverlight调用的JS方法返回对象数组的处理方法
来源:互联网 发布:淘宝助理下载不了订单 编辑:程序博客网 时间:2024/05/17 15:40
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也创建一个结构相同的类:
1: public class TestObject
2: {
3: public string Field1 { get; set; }
4: public string Field2 { get; set; }
5: }
准备工作到这里结束。
在Silverlight里调用JS方法的代码如下:
1: 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", null) as ScriptObject;
2: List<TestObject> objects = returnedValue.ConvertTo<List<TestObject>>();
调试结果如下:
很明显,转换成功了。剩下的事情就是按业务需求来处理了。
- Silverlight调用的JS方法返回对象数组的处理方法
- js数组对象的方法
- JS 处理JSON数据及javascript处理对象、JSON对象、hash对象、数组对象的方法
- Silverlight中调用JS方法并获取返回值
- dwr调用参数为 对象数组 的方法(js中直接传递obj数组)
- js--数组对象的属性方法整理
- jquery中ajax如何返回值到上层函数的方法以及对于js处理json对象方法的记录
- 前台js如何调用后台的方法的返回值
- iBatis调用返回两个游标的存储过程处理方法
- 调用Camera返回为空的分析及处理方法
- 为什么多次调用同一个对象的HashCode方法返回不一样
- oracle 存储过程返回对象数组的方法
- [前端] jquery方法 遍历返回的对象数组
- 对象的调用方法
- 对象,方法的调用
- [Silverlight] 关于线程调用的扩展方法
- [Silverlight] 关于线程调用的扩展方法
- SpringMVC jdbc返回的不是标准对象时处理方法
- uva321 - The New Villa(新别墅)
- Mtk 下的图形渲染配置文件egl.cfg
- PDP分组数据协议
- 判断数组中是否有重复的数——微软面试题
- Poj 1006 Biorhythms
- Silverlight调用的JS方法返回对象数组的处理方法
- Tomcat使用startup可以启动,windows服务无法启动
- cpsr与cpsr_c的区别
- 如何去掉activity启动时的启动窗口(starting window)?
- float a=1.0f 这里的1.0f中的“f”代表什么 ?float的储存格式?
- 合格的电子工程师需要掌握的知识和技能
- 记录下原厂的回复----升级UDB
- 利用JAVA类实现九九乘法口诀
- input 输入事件