2017-06-27 10 views
0

私は、計算されたプロパティを持つ使用可能なTypeScriptクラスとして返されるJSONオブジェクトを変換しようとしています。角2 - 計算されたプロパティを持つクラスへのJSONの解析

マッピングすると、返される値はすべて正しく取得されますが、デフォルト値があるかどうかに関わらず、オブジェクト上にあるべき計算されたプロパティは削除/無視されます。

所望の結果は、JSONをデシリアライズしている真

export class Maintenance { 
    Id?: number; 
    Name?: string; 

    // computed property - doesn't exist on returned data as it's a client 
    // property in an ngFor loop. 
    ShowPanel: boolean = true; 
} 

@Component({ 
    moduleId: module.id, 
    selector: 'app-home', 
    templateUrl: './home.component.html', 
    styleUrls: ['./home.component.scss'] 
}) 
export class HomeComponent { 
    ngOnInit(){ 
     this.http.get('lookup/getstatusinformation') 
       .map(res => <Maintenance[]>res.json()) 
       .subscribe(res => this.listMaintenance = res); 

    } 
} 
+0

res.json()はJSON形式の文字列のみを返します。インターフェイスを使用してPOJOにマップすることはできますが、クラスインスタンスの配列を作成する場合は、クラス –

+1

@Jotaのコンストラクタメソッドを使用して、.json()戻り値およびインスタンスの新しいオブジェクトをループする必要があります。 Toledoの作者は、.map関数の保守タイプの配列としてjsonデータをキャストします。 – YD1m

+1

TypeScriptは何もキャストしません。あなたは、 'json()'からの戻り値が、 'Maintenance'インスタンスではないと主張しています*。それはただの目的です。 'Maintenance'インスタンスが必要な場合は、' new'などを使用してインスタンスを作成する必要があります。 – cartant

答えて

1

にShowPanelのデフォルトは、JSONデータ内に設けられていないプロパティがそのデフォルト値に対象オブジェクトに設定されることである - そのデフォルトあたかも値は応答の一部でした。

個人的には、作成後にオブジェクトを反復処理し、計算値をリセットします。

関連する問題