是否可以通过AMF接收自定义通用类型对象?我正在尝试将flex应用程序与现有的C#服务集成,但flex正在阻塞自定义泛型类型对象。据我所知,Flex甚至不支持泛型,但我希望能够只读取对象并根据需要强制转换成员。我基本上只想弯曲忽略<T>
。我希望有一种方法可以做到这一点,因为flex不会抱怨类型集合(服务器调用返回List工作正常,flex将其转换为ArrayCollection,就像未键入的List一样)。
这是一个关于我发生的事情的简洁示例:
自定义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:错误#1034:输入强制 失败:无法转换 mx.utils :: ObjectProxy @ 11a98041 to com.model.vos.TypeTest。
如果我更改结果处理程序以获取Object类型的参数,它会很好地工作。
任何人都知道如何使用值对象进行此操作?我觉得我错过了一些非常明显的东西。
答案 0 :(得分:0)
尝试在结果处理程序中接收ObjectProxy并使用调试器查看其内容。代理可能是ResultEvent或类似的容器类,而不是普通的TypeTest对象。
答案 1 :(得分:0)
我最近遇到了这个问题,当其中一个模块正在加载一个对象数组而另一个模块失败时。经过2天的互联网研究,然后进入代码,我发现模块失败了,flex无法注册对象类,因此转换失败。我尝试在一些虚拟方法中实例化对象的虚拟变量,一切都很好。