我有这个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工厂内部的类?