我想在JSON
中反序列化Typescript
对象。我发现这个相关的question我想使用已接受答案的approach 4
。但是我不确定这是否适用于我的情况,因为该对象具有arrays
其他对象的成员,所以array
中的对象也是如此。此外,我想使用一种通用的方法/方法,即使不知道对象依赖关系的结束位置,也会对对象进行反序列化。对象结构如下:
class Parent {
s: string;
x: number;
children : Array<Child1>
...
}
class Child1 {
t: string;
y: number;
children : Array<Child2>
...
}
class Child2 {
k: string;
z: number;
children : Array<Child3>;
...
}
...
如何反序列化这些类型的对象?即使采用将对象结构的结尾视为理所当然的方法,我也会感到满意。
答案 0 :(得分:2)
我不确定我是否理解您的全部要求,但您说要使用的方法基本上使每个类负责反序列化自身。因此,如果父知道它有Child1
数组,它知道它可以遍历json中的children
数组,然后调用Child1
来反序列化每个子节点。 Child1
然后可以为其子项执行相同操作,依此类推:
class Parent {
s: string;
x:number;
children: Child1[] = [];
deserialize(input) {
this.s = input.s;
this.x = input.x;
for(let child of input.children){
this.children.push(new Child1().deserialize(child))
}
return this;
}
}
class Child1{
t: string;
y: number;
children: Child2[] = []
deserialize(input) {
this.t = input.t;
this.y = input.x;
for(let child of input.children){
this.children.push(new Child2().deserialize(child))
}
return this;
}
}
class Child2{
deserialize(input) {
//...
return this;
}
}
答案 1 :(得分:0)
为避免列出所有属性,我使用了link。
前提是要有一个类可以实现的可反序列化的接口:
export interface Deserializable {
deserialize(input: any): this;
}
然后我们使用Object.assign。
课程:
class Parent {
s: string;
x: number;
children: Child1[] = [];
deserialize(input) {
Object.assign(this, input);
let deserializedChildren: Child1[] = [];
for(let child of input.children){
deserializedChildren.push(new Child1().deserialize(child))
}
this.children = deserializedChildren;
return this;
}
}
class Child1{
t: string;
y: number;
deserialize(input) {
Object.assign(this, input);
return this;
}
}