将JSON对象反序列化为其原始类

时间:2019-06-29 02:57:28

标签: javascript node.js typescript

我正在尝试序列化/反序列化一个对象。我认为最好的方法是将路径保存为作为json的一部分调用的文件,但是我不确定如何获取该路径。

在父级(A.ts)中调用该路径是否可以获得文件(B.ts / Base.ts)的路径?

也许有更好的方法吗?我正在尝试采用在主节点进程中创建的类,并将其传递给工作进程,我能看到的唯一原因就是以某种方式对类进行序列化/反序列化。

// src/Base.ts
export abstract class Base {

  public serialize() {
    return JSON.stringify({path: '', obj: this})
  }

  public static deserialize(json: string) {
    let { path, obj } = JSON.parse(json) as { path: string, obj: { [key: string]: any } }

    let newable = require(path)
    let o = new newable
    return Object.assign(o, obj)
  }

}

// src/filter/A.ts
export class A extends Base {
  public cat: string = 'meow'
  public sayHi() { return this.cat }
}

// src/filter/B.ts
export class B extends Base {
  public dog: string = 'woof'
  public sayHi() { return this.dog }
}

// test.ts
let serializedA = new A().serialize()
let serializedB = new B().serialize()
// Create child...
let worker = cp.fork(path.join(__dirname, './worker'), [], { silent: true })
worker.send({ serializedA, serializedB })

// worker.ts
process.on('message', msg => {
  let classA = Base.deserialize(msg.serializedA)
  let classB = Base.deserialize(msg.serializedB)
})

1 个答案:

答案 0 :(得分:0)

想到的最简单的方法是拥有一组与需要适当类的回调相关联的类名。

<p>piece of a puzzle</p>

<p>Planet <img src="someImage.png"> Earth</p>