我想用Angular 2做一个浏览器应用程序,你可以在其中制作和分享模拟考试。我有一个Exam类实例,其中包含包含ExamQuestion类实例等的ExamSection类实例。
我希望应用程序能够保存和加载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类型,但这不起作用(对象类型不变)。因为对象是普通对象,所以我去掉了方法和像length这样的属性(对于数组)。
谁能给我解释一下在Angular应用程序中如何在TypeScript对象和JSON对象之间进行转换,包括所需的库如何以及在哪里?有时将模块放在"node_modules“文件夹中是可行的,有时它属于"src”文件夹中的某个位置(我通常需要反复试验才能解决这个问题)。
编辑:我得到了一个老套的解决方案,JSON中描述的对象有一个“反序列化”方法,用于递归地重新构造类实例。我希望有人能解释如何使用不同的解决方案,因为我怀疑我目前的解决方案是否适用于大型项目。
发布于 2018-01-16 11:56:33
我做了一个名为json-dry的小包。它支持(循环)引用和类实例。
您必须定义两个类方法(原型上的toDry
和静态方法的unDry
),注册类,然后就可以了。
我已经使用它很多年了,它也能够序列化非常大的集合。
https://stackoverflow.com/questions/46981353
复制相似问题