class MyClass {
constructor() {
this.foo = 3
}
}
var myClass = new MyClass()
J'aimerais sérialiser l'objet myClass
en json.
Un moyen facile auquel je peux penser est, puisque chaque membre est en fait un objet javascript (array, etc.). Je suppose que je peux maintenir une variable pour contenir les variables de membre.
this.prop.foo = this.foo
et ainsi de suite.
Je m'attendais à trouver une bibliothèque toJSON/fromJSON
pour les objets de classe, car je les utilisais avec d'autres langages tels que Swift/Java, mais je ne pouvais pas en trouver une pour javascript.
La construction de classe est peut-être trop nouvelle, ou ce que je demande peut être facilement réalisé sans une bibliothèque.
Comme pour tout autre objet que vous souhaitez stringifier dans JS, vous pouvez utiliser JSON.stringify
:
JSON.stringify(yourObject);
class MyClass {
constructor() {
this.foo = 3
}
}
var myClass = new MyClass()
console.log(JSON.stringify(myClass));
Il est également intéressant de noter que vous pouvez personnaliser la manière dont stringify
sérialise votre objet en lui donnant une méthode toJSON
. La valeur utilisée pour représenter votre objet dans la chaîne JSON résultante sera le résultat de l'appel de la méthode toJSON
sur cet objet.
Je sais que cette question est ancienne, mais je me suis égaré les yeux jusqu'à ce que j'écrive une véritable solution compacte, "sûre".
La désérialisation renvoie des objets auxquels des méthodes de travail sont encore attachées.
La seule chose à faire est d’enregistrer les classes que vous voulez utiliser dans le constructeur du sérialiseur.
class Serializer{
constructor(types){this.types = types;}
serialize(object) {
let idx = this.types.findIndex((e)=> {return e.name == object.constructor.name});
if (idx == -1) throw "type '" + object.constructor.name + "' not initialized";
return JSON.stringify([idx, Object.entries(object)]);
}
deserialize(jstring) {
let array = JSON.parse(jstring);
let object = new this.types[array[0]]();
array[1].map(e=>{object[e[0]] = e[1];});
return object;
}
}
class MyClass {
constructor(foo) {this.foo = foo;}
getFoo(){return this.foo;}
}
var serializer = new Serializer([MyClass]);
console.log(serializer.serialize(new MyClass(42)));
//[0,[["foo",42]]]
console.log(serializer.deserialize('[0,[["foo",42]]]').getFoo());
//42
Ce qui précède devrait suffire à vous aider, mais vous trouverez plus de détails et une version abrégée ici .
Je suis tombé sur cette bibliothèque qui effectue la sérialisation et la désérialisation d'objets complexes:
https://github.com/typestack/class-transformer
Il a au moins deux méthodes:
plainToClass() -> json obj to class
classToPlain() -> class to json obj
Cela pourrait aider à gagner du temps pour ceux qui recherchent une telle solution