Любой способ улучшить этот рецепт сериализации JSON Typescript? - PullRequest
0 голосов
/ 03 января 2019

У меня есть этот декоратор Typescript, который добавит некоторые методы сериализации и создаст карту имен классов к фактическим экземплярам класса для десериализации.

export interface JsonSerializedDecorator {
    className: string;
    instance: Function;
}

export const JsonSerializerMap: Map<string, Function> = new Map();


export function JsonSerialized(meta?: JsonSerializedDecorator): any {

    JsonSerializerMap.set(meta.className, meta.instance);

    return function (cls) {
        cls.prototype.className = meta.className;
        cls.prototype.toJson = toJson //shortened for brevity
        cls.prototyee.fromJson = fromJson //shortened for brevity
    };

}

И я могу использовать его следующим образом:

@JsonSerialized({className: 'provision.kiosk.KioskPage', instance: KioskPage})
export class KioskPage { ... }

Затем в другом месте есть код, который будет сканировать весь JSON с сервера в поисках className = 'somepackage.someclass', чтобы использовать карту для создания нового экземпляра объекта для десериализации.

Но чтоМне не нравится, когда приходится передавать ссылку на экземпляр, чтобы фабрика Decorator могла построить карту для десериализации позже.Важно, чтобы карта создавалась во время выполнения, чтобы десериализация могла работать без создания каких-либо классов.Какие-нибудь умные идеи о том, как улучшить это, как, может быть, изящный трюк, чтобы получить ссылку на класс внутри фабрики Decorator?

...