Получение универсальных типизированных <T>пользовательских объектов через удаленный объект во Flex - PullRequest
1 голос
/ 28 апреля 2010

Можно ли получать пользовательские объекты общего типа через AMF? Я пытаюсь интегрировать приложение flex с существующим сервисом C #, но flex душит пользовательские объекты общего типа. Насколько я могу судить, 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;
    }

Соответствующий объект значения 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);
}

Когда вызывается обработчик результата, я получаю ошибку времени выполнения:

Ошибка типа: ошибка # 1034: приведение типа не удалось: не удалось преобразовать mx.utils :: ObjectProxy @ 11a98041 to com.model.vos.TypeTest.

Раздражительно, если я изменяю обработчик результатов на параметр типа Object, он работает нормально.

Кто-нибудь знает, как заставить это работать с объектом значения? Я чувствую, что упускаю что-то действительно очевидное.

Ответы [ 2 ]

0 голосов
/ 22 ноября 2010

Я недавно столкнулся с этой проблемой, когда один из модулей работает при загрузке массива объектов, в то время как другой модуль дает сбой. После 2 дней исследований в Интернете, а затем в коде, я обнаружил, что модуль вышел из строя, flex не может зарегистрировать класс объекта и, следовательно, преобразование не удается. Я попытался создать фиктивную переменную объекта в некотором фиктивном методе, и все работает хорошо.

0 голосов
/ 28 апреля 2010

Попробуйте получить ObjectProxy в обработчике результатов и использовать отладчик, чтобы просмотреть его содержимое. Прокси, скорее всего, для ResultEvent или аналогичного класса контейнера, а не для простого объекта TypeTest.

...