Zoeken op website

javascript - Deserialiseer een JSON-object naar de oorspronkelijke klasse


Ik probeer een object te serialiseren/deserialiseren. Ik denk dat de beste manier zou zijn om het pad naar het bestand dat werd aangeroepen als onderdeel van de json op te slaan, maar ik weet niet precies hoe ik dat pad moet krijgen.

Kan het verkrijgen van dit pad naar het bestand (A.ts/B.ts) worden gedaan wanneer het wordt aangeroepen binnen de ouder (Base.ts)?

Is er misschien een betere manier om dit te doen? Ik probeer een klasse die in het hoofdnodeproces is gemaakt te nemen en door te geven aan een werkproces, de enige manier die ik kan zien om dit te doen is om de klasse op de een of andere manier te serialiseren/deserialiseren.

// 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)
})