Бросок JSON как пользовательский Объект ActionScript?

Вы можете использовать этот код:

toggle.setDrawerIndicatorEnabled(false);

Прекрасно работает для меня.

6
задан JeffryHouser 17 April 2013 в 23:03
поделиться

3 ответа

В AS3 нельзя преобразовать динамический объект в настраиваемый класс, используя как или CustomClass (customObject) .

Однако вы можете используйте несколько простых приемов в качестве обходного пути. Например, вы можете объявить конструктор для вашего пользовательского класса, принимающего объект и инициализирующего его члены с помощью свойств объекта.

Затем вы должны использовать:

var customObject:CustomClass = new CustomClass(JSON.decode(evt.result as String));

PS. Что касается комментариев, это верно не для всех языков ... Я думаю, это делает его специфичным для ActionScript .

4
ответ дан 9 December 2019 в 22:39
поделиться

По сути, это невозможно. И это не имеет ничего общего с ActionScript. В большинстве других языков у вас такая же проблема, поскольку слева у вас есть анонимный объект, если язык поддерживает что-либо подобное, или хэш. Тем не мение. Существуют разные решения, это может быть одно, которое может обрабатывать несколько вещей:

package  {
    public class ObjectUtils {
        public static function createInstance(constructor:Class):* {
            var ret:*;
            switch (describeType(to).factory.constructor.parameter.(@optional == "false").length()) {
                case 0: ret = new to(); break;
                case 1: ret = new to(null); break;
                case 2: ret = new to(null, null); break;
                case 3: ret = new to(null, null, null); break;
                case 4: ret = new to(null, null, null, null); break;
                case 5: ret = new to(null, null, null, null, null); break;
                case 6: ret = new to(null, null, null, null, null, null); break;
                case 7: ret = new to(null, null, null, null, null, null, null); break;
                case 8: ret = new to(null, null, null, null, null, null, null, null); break;
                case 9: ret = new to(null, null, null, null, null, null, null, null, null); break;          
                default: throw new Error("no implementation for instantiating classes that require more than 9 constructor arguments");
            }
            return ret;
        }
        public static function castAnonymous(obj:Object, to:Class):* {
            var ret = createInstance(obj);
            for (var name:String in obj)
                try {
                    ret[name] = obj[name];
                }
                catch (e:Error) {
                    throw new Error("error trying to assign value " + obj[name] + " to property " + name + " on " + ret + ". reason: " + e);
                }
            return ret;
        }               
    }   
}

ограничения:

  1. завершится ошибкой, если ваш класс паникует, если он засыпан пустыми значениями при построении или конструктору требуется более 9 аргументов
  2. нет, и также не может рекурсивно, поэтому он может просто назначать анонимные объекты или массивы свойствам возвращенного экземпляра

, надеясь, что это все равно поможет;)

greetz

back2dos

3
ответ дан 9 December 2019 в 22:39
поделиться

(На основе на SQL Server)

Я думаю, что когда дело доходит до подсказок таблиц, вам нужно поэкспериментировать (TABLOCK, TABLOCKX) и посмотреть, что лучше всего подходит для вас. Также имейте в виду, что оптимизатор запросов может игнорировать подсказки. Но вы можете расширить JSON-Decoder из as3corelib. Я сделал это именно по этой причине. Когда я декодирую json-String, я передаю имя класса закодированного объекта. С небольшим использованием отражения вы получите обратно строго типизированный настраиваемый объект. Конечно, вам нужно знать имя класса закодированного объекта перед декодированием ...

0
ответ дан 9 December 2019 в 22:39
поделиться