- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
class MapUtils {
    static isPrimitive(obj) {
        switch (typeof obj) {
            case "string":
            case "number":
            case "boolean":
                return true;
        }
        return !!(obj instanceof String || obj === String ||
        obj instanceof Number || obj === Number ||
        obj instanceof Boolean || obj === Boolean);
    }
    static getClazz(target: any, propertyKey: string): any {
        return Reflect.getMetadata("design:type", target, propertyKey)
    }
    static getJsonProperty<T>(target: any, propertyKey: string):  IJsonMetaData {
        return Reflect.getMetadata(jsonMetadataKey, target, propertyKey);
    }
    static deserialize<T>(clazz:{new(): T}, jsonObject) {
        if ((clazz === undefined) || (jsonObject === undefined)) return undefined;
        let obj = new clazz();
        Object.keys(obj).forEach((key) => {
            let propertyMetadataFn:(IJsonMetaData) => any = (propertyMetadata)=> {
                let propertyName = propertyMetadata.name || key;
                let innerJson = undefined;
                innerJson = jsonObject ? jsonObject[propertyName] : undefined;
                let clazz = MapUtils.getClazz(obj, key);
                if (!MapUtils.isPrimitive(clazz)) {
                    return MapUtils.deserialize(clazz, innerJson);
                } else {
                    return jsonObject ? jsonObject[propertyName] : undefined;
                }
            };
            let propertyMetadata:IJsonMetaData = MapUtils.getJsonProperty(obj, key);
            if (propertyMetadata) {
                obj[key] = propertyMetadataFn(propertyMetadata);
            } else {
                if (jsonObject && jsonObject[key] !== undefined) {
                    obj[key] = jsonObject[key];
                }
            }
        });
        return obj;
    }
}
                                 
        
            Учимся кодить правильно: http://cloudmark.github.io/Json-Mapping/
        
        
Это что, в JS уже шаблоны есть? До чего техника дошла... Убийца C++ растёт.
на фоне джаваскприта С++ это очень чистый и логичный язык
Ну вот видите, таки убил!
А ты - недорезанный пёс.
http://govnokod.ru/21491#comment356462
Если первая, то всё было примерно так же, только писали про Тараса и кавказцев, а минусов было 20-40 вместо 60-1500, просто всё забылось, а говнокод 2013го кажется райским лугом с единорогами.
Да, спокойное время было, хорошее. В последний год достаточно мало мусорили здесь.