2010-04-27 52 views
1

是否可以通過AMF接收自定義泛型類型對象?我正嘗試將Flex應用程序與現有的C#服務集成,但flex會窒息自定義泛型類型的對象。據我所知,Flex甚至不支持泛型,但我希望能夠讀取對象並根據需要投射它的成員。我基本上只想flex以忽略<T>。我希望有一種方法可以做到這一點,因爲flex不會抱怨類型化集合(一個服務器調用返回List工作正常,Flex會將它轉換爲ArrayCollection就像一個非類型化的List)。接收通用類型<T>通過Flex中的遠程對象定製對象

這裏是怎麼回事,我的下調例如:

定製的C#類型類

public class TypeTest<T> 
    { 
     public T value { get; set; } 

     public TypeTest() 
     { 
     } 
    } 

服務器方法返回typeTest

public TypeTest<String> doTypeTest() 
    { 
     TypeTest<String> theTester = new TypeTest<String>("grrrr"); 

     return theTester; 
    } 

相應的彈性值對象:

[RemoteClass(alias="API.Model.TypeTest")] 
    public class TypeTest 
    { 
     private var _value:Object; 

     public function get value():Object 
     { 
      return _value; 
     } 

     public function set value(theValue:Object):void 
     { 
      _value = value; 
     } 

     public function TypeTest() 
     { 
     } 
    } 

和結果處理代碼:

public function doTypeTest(result:TypeTest):void 
{ 
    var theString:String = result.value as String; 

    trace(theString); 
} 

當結果處理函數被調用我得到的運行時錯誤:

TypeError: Error #1034: Type Coercion failed: cannot convert mx.utils::[email protected] to com.model.vos.TypeTest.

不快如果我改變結果處理採取Object類型的參數它工作正常。

任何人都知道如何使這個值的對象工作?我覺得我失去了一些非常明顯的東西。

回答

0

嘗試在結果處理程序中接收ObjectProxy並使用調試器查看它的內容。該代理很可能是ResultEvent或類似的容器類,而不是普通的TypeTest對象。

+0

感謝您的提示,但是當我在調試器中檢查出它返回的ObjectProxy看起來像它是實際的TypeTest對象。它具有可作爲result.value訪問的值字段 – Aaron 2010-04-28 18:25:51

0

我最近遇到了這個問題,當其中一個模塊在加載一個對象數組而其他模塊失敗時工作。經過兩天的互聯網研究,然後進入代碼,我發現失敗的模塊,flex無法註冊對象類,因此轉換失敗。我嘗試在一些虛擬方法中實例化對象的虛擬變量,並且一切正常。