我想使用Angular 2制作一个浏览器应用程序,您可以在其中制作和分享模拟考试。我有一个包含ExamSection类实例的Exam类实例,其中包含ExamQuestion类实例等。
我希望应用能够将考试保存并加载为JSON。我目前的解决方案是:
constructor(private http:Http) {
this.http.get('Exam.json')
.map((response) => {
return response.json();
}).subscribe(data => {
this.exam = <Exam>data;
//console.log(typeof(<Exam>data));
console.log(this.exam);
this.refreshMarksMethods(this.exam);
});
}
第一个问题是JSON被反序列化为普通对象。我尝试使用serializer.ts(https://www.npmjs.com/package/serializer.ts)和类变换器(https://github.com/pleerock/class-transformer)来为Angular使用的TypeScript类进行序列化和反序列化,但是我一直收到与丢失模块有关的错误。这些库的示例中没有引用缺少的模块,据我所知,所以我不知道它们属于哪里。
我试图解决这个问题的一个技巧是将普通对象转换为所需的Typescript类型,但这不起作用(对象类型不会改变)。因为对象是普通对象,所以我放松了方法以及长度(对于数组)等属性。
有人可以向我解释我如何在Angular应用程序中将TypeScript对象转换为JSON和从JSON转换,包括所需库的方式和位置?有时将模块放在“node_modules”文件夹中,有时它属于“src”文件夹中的某个位置(我必须通过反复试验来解决这个问题)。
编辑:我得到了一个hacky解决方案,在JSON中描述的对象有一个“反序列化”方法,用于递归重建类实例。我希望有人可以解释如何使用不同的解决方案,因为我怀疑我目前的解决方案是否适用于大型项目。
答案 0 :(得分:1)
我制作了一个名为json-dry的小包裹。它支持(循环)引用以及类实例。
您必须在原型上定义2个类方法(toDry
,并将unDry
定义为静态方法),注册该类,然后离开。
我已经使用它多年了,它也可以序列化非常大的集合。