【问题标题】:Receiving generic typed <T> custom objects through remote object in Flex通过 Flex 中的远程对象接收泛型类型的 <T> 自定义对象
【发布时间】:2010-04-27 22:21:15
【问题描述】:

是否可以通过 AMF 接收自定义的泛型类型对象?我正在尝试将 flex 应用程序与现有的 C# 服务集成,但 flex 在自定义泛型类型对象上令人窒息。据我所知,Flex 甚至不支持泛型,但我希望甚至能够读取对象并根据需要转换其成员。我基本上只是想让 flex 忽略&lt;T&gt;。我希望有一种方法可以做到这一点,因为 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 类型的参数,它可以正常工作。

有人知道如何使用值对象来实现这一点吗?我觉得我错过了一些非常明显的东西。

【问题讨论】:

    标签: .net apache-flex amf remoteobject


    【解决方案1】:

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

    【讨论】:

    • 感谢您的提示,但是当我在调试器中检查它时,返回的 ObjectProxy 看起来就像是实际的 TypeTest 对象。它的 value 字段可作为 result.value 访问
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2013-08-29
      • 2015-01-01
      • 2021-09-26
      • 1970-01-01
      • 2021-05-26
      • 1970-01-01
      • 2013-01-08
      • 2011-07-09
      • 2019-02-02
      相关资源
      最近更新 更多