J'ai une définition d'objet JavaScript qui contient une référence circulaire : elle a une propriété qui fait référence à l'objet parent.
Il possède également des fonctions que je ne souhaite pas voir transmises au serveur. Comment sérialiser et désérialiser ces objets ?
J'ai lu que la meilleure méthode consiste à utiliser le logiciel stringify de Douglas Crockford. Cependant, j'obtiens l'erreur suivante dans Chrome :
TypeError : Conversion d'une structure circulaire en JSON
Le code :
function finger(xid, xparent){
this.id = xid;
this.xparent;
//other attributes
}
function arm(xid, xparent){
this.id = xid;
this.parent = xparent;
this.fingers = [];
//other attributes
this.moveArm = function() {
//moveArm function details - not included in this testcase
alert("moveArm Executed");
}
}
function person(xid, xparent, xname){
this.id = xid;
this.parent = xparent;
this.name = xname
this.arms = []
this.createArms = function () {
this.arms[this.arms.length] = new arm(this.id, this);
}
}
function group(xid, xparent){
this.id = xid;
this.parent = xparent;
this.people = [];
that = this;
this.createPerson = function () {
this.people[this.people.length] = new person(this.people.length, this, "someName");
//other commands
}
this.saveGroup = function () {
alert(JSON.stringify(that.people));
}
}
Il s'agit d'un cas de test que j'ai créé pour cette question. Ce code comporte des erreurs, mais j'ai essentiellement des objets dans des objets, et une référence passée à chaque objet pour montrer quel est l'objet parent lorsque l'objet est créé. Chaque objet contient également des fonctions, que je ne veux pas voir stringifiées. Je veux juste que les propriétés telles que le Person.Name
.
Comment sérialiser avant d'envoyer au serveur et désérialiser en supposant que le même JSON est renvoyé ?