Silverlight調用的JS方法返回對象數組的處理方法

來源:互聯網
上載者:User

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

調試結果如下:

很明顯,轉換成功了。剩下的事情就是按業務需求來處理了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.