通过Flex </t>中的远程对象接收通用类型的<t>自定义对象

时间:2010-04-27 22:21:15

标签: .net flex amf remoteobject

是否可以通过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类型的参数,它会很好地工作。

任何人都知道如何使用值对象进行此操作?我觉得我错过了一些非常明显的东西。

2 个答案:

答案 0 :(得分:0)

尝试在结果处理程序中接收ObjectProxy并使用调试器查看其内容。代理可能是ResultEvent或类似的容器类,而不是普通的TypeTest对象。

答案 1 :(得分:0)

我最近遇到了这个问题,当其中一个模块正在加载一个对象数组而另一个模块失败时。经过2天的互联网研究,然后进入代码,我发现模块失败了,flex无法注册对象类,因此转换失败。我尝试在一些虚拟方法中实例化对象的虚拟变量,一切都很好。