2017-06-17 1 views
0

Je sérialisation un Tapuscrit objet de classe:contrôle de l'ordre de sérialisation JSON dactylographiée

class Geometry { 
    public abstract type: string; 
    public abstract coordinates: Coordinates | number[]; 
} 

class Point extends Geometry { 
    public readonly type: string = "Point"; 

    constructor(public coordinates: Coordinate | number[]) { 
     super(); 
    } 
} 

utilisant JSON.stringify(new Point([10, 10]));

Jusqu'à présent, si bien, cependant, cela est inséré en fin de compte dans un GeoJSON l'objet et l'ordre des propriétés des questions. Ce que je veux est:

{"coordinates":[10,10],"type":"Point"} 

Ce que j'ai besoin est:

{"type":"Point","coordinates":[10,10]} 

Si vous ne spécifiez pas de public coordinates dans le constructeur et les assignent:

constructor(coordinates: Coordinate | number[]) { 
    super(); 
    this.coordinates = coordinates; 
} 

la le résultat est correct. Étant un minimaliste, j'essaie de faire en sorte que cela fonctionne avec le constructeur en utilisant le paramètre public.

Existe-t-il un moyen de contrôler l'ordre des propriétés dans la méthode JSON.stringify(-)?


Donner une réponse alternative à moi-même

Le vrai problème est avec la valeur properties d'une caractéristique (en dehors du champ d'application de la question initiale). En remplaçant la méthode toJSON sur l'objet, il est possible de contrôler comment un objet se sérialise. J'ai ajouté le suivant à ma classe Geometry et tout allait bien.

public toJSON() { 
    return { 
     type: this.type, 
     coordinates: this.coordinates, 
    }; 
} 

je fait pour décorer mes plus en amont Feature et FeatureCollection les classes ainsi.

Répondre

4

Vous pouvez passer un deuxième paramètre à JSON.stringify avec un tableau avec le nom des propriétés dans l'ordre souhaité.

Par exemple:

JSON.stringify(new Point([10, 10]), ['type', 'coordinates']); 
+1

merci de me pointer dans la bonne direction et, finalement, me faire _RTFM_. – THBBFT

+0

Content de vous aider :) –