1

是否可以通过 AMF 接收自定义泛型类型对象?我正在尝试将 flex 应用程序与现有的 C# 服务集成,但 flex 在自定义泛型类型对象上令人窒息。据我所知,Flex 甚至不支持泛型,但我希望能够只读取对象并根据需要转换其成员。我基本上只是想让 flex 忽略<T>. 我希望有一种方法可以做到这一点,因为 flex 不会抱怨类型化集合(返回 List 的服务器调用工作正常,并且 flex 将它转换为 ArrayCollection 就像一个非类型化列表一样)。

这是我正在发生的事情的精简示例:

自定义 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;
    }

对应的 flex 值对象:

[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 转换为 com.model.vos.TypeTest。

令人恼火的是,如果我将结果处理程序更改为采用 Object 类型的参数,它工作正常。

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

4

2 回答 2

0

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

于 2010-04-28T16:28:51.497 回答
0

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

于 2010-11-22T19:36:42.490 回答