zoukankan      html  css  js  c++  java
  • (转)Silverlight调用的JS方法返回对象数组的处理方法

     

    最近在做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>>();

    调试结果如下:

    image

    很明显,转换成功了。剩下的事情就是按业务需求来处理了。

  • 相关阅读:
    查找mysql数据库中所有包含特定名字的字段所在的表
    redis在windows下安装和PHP中使用
    CentOS 6.3下源码安装LAMP(Linux+Apache+Mysql+Php)环境
    telnet: connect to address 127.0.0.1: Connection refused
    [Java]局域网五子棋
    springboot-web进阶(三)——统一异常处理
    springboot-web进阶(二)——AOP统一处理请求
    springboot-web进阶(一)——表单验证
    springboot快速入门(五)——事务管理
    springboot快速入门(四)——数据库操作
  • 原文地址:https://www.cnblogs.com/wangyt223/p/3297290.html
Copyright © 2011-2022 走看看