2017-02-15 3 views
1

私のシナリオは本当に簡単です。私はAngular2アプリケーション内でJSONを逆シリアル化しようとしています。問題は、JSONに@で始まるフィールドがあることです。JSON(@で始まるフィールド)Angular2の逆シリアル化

例:

{ 
    "@type": ".StringField", 
    "name": "description", 
    "type": "String", 
    "value": "A" 
    } 

だから私の質問は、私は、フィールド@typeに活字体でクラスを書くのですか、ですか?きちんとしたやり方はありますか?私は解決策を見つけることができません。ギュンターZöchbauer

@

は、次のコードを考えてみましょう:

getCustomerProfile(): Observable<CustomerMetaModel> { 
    return this.http.get('/customer/metaModel') 
     .map(this.extractData) 
     .catch(this.handleError); 
    } 

    private extractData(res: Response): string { 
    let body = res.json(); 
    return body || {}; 
    } 

を自分で解析をやっていないんだけど、機能getCustomerProfile()は、すべての仕事をしてみましょう。この状況をどうやって管理するのですか?

+0

クラスプロパティは、同じ名前を持つには何が必要ですか? –

+0

なぜあなたは、文字列操作を使用してjsonから 'type'に '@type'を置き換えずに、新しいjson(置換後に得た文字列)を使ってur演算を続行しないでください。 –

+0

@GünterZöchbauer、名前は同じである必要はありません。 – Nano

答えて

3
class MyClass { 
    String xtype; 
    String name; 
    String type; 
    String value; 
    constructor(json:any) { 
    this.xtype = json['@type']; 
    this.name = json.name; 
    this.type = json.type; 
    this.value = json.value; 
    } 
} 
var myClass = new MyClass(json); 
+0

MyClassの配列を含むオブジェクトを取得したら、その配列を解決するために.mapを実行する必要がありますか?疑問は、btwを要求するだけです –

+1

はい、 'map()'はそれを行います –

+0

@GünterZöchbauer私は質問にいくつかの他の情報を追加しました。 – Nano