2017-06-17 2 views
0

私は活字体クラスオブジェクト直列化していますにJSONシリアライズの順序を制御:はtypescriptです

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(); 
    } 
} 

これまでのところは良いがJSON.stringify(new Point([10, 10]));

を使用して、しかし、これは最終的ににGeoJSONに挿入されていますプロパティのオブジェクトと順序が重要です。私は何を取得していことです:

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

私は必要なものである:

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

コンストラクタでpublic coordinatesを宣言し、それらを割り当てない場合:

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

結果は正しい。ミニマリストなので、私はpublicパラメータを使ってコンストラクタでこれを動作させようとしています。

JSON.stringify(-)メソッドのプロパティの順序を制御する方法はありますか?


自分自身に別の答えを与える

本当の問題は、(元の質問の範囲外)機能のproperties値としました。オブジェクトのtoJSONメソッドをオーバーライドすることによって、オブジェクトがそれ自身をどのように直列化するかを制御することが可能です。私は次のものを私のGeometryクラスに加えました。

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

私はさらに、よく私の上流FeatureFeatureCollectionクラスを飾るために作られました。

答えて

4

JSON.stringifyに2番目のパラメータを渡すことができます。配列の名前は、プロパティの名前を希望する順序で指定します。例えば

:正しい方向に私を指して、最終的に私に_RTFM_を作るための

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

感謝。 – THBBFT

+0

喜んで:) –

関連する問題