2017-07-05 19 views
0

C#のバックグラウンドから、動的で反射的なやり方で、私はTypeScriptクラスに適用しようとしています。 バックグラウンドでは、アプリケーションをWebアプリケーションに変換しています。バックエンドの開発者は、Jsonに対応するためにバックエンドを全く変更したくありません。私はこのデータを理解するJsonMinimalと呼ばれる特殊なメソッドを持っており、オブジェクトを返すレスポンスを拡張アンギュラクラスを記述するために探していますTypeScript/Angular 2動的オブジェクトデシリアライザの作成

{ 
Columns: [ 
    { 
    "ColumnName": "ClientPK", 
    "Label": "Client", 
    "DataType": "int", 
    "Length": 0, 
    "AllowNull": true, 
    "Format": "", 
    "IsReadOnly": true, 
    "IsDateOnly": null 
    } 
], 
Rows:[ 
    0 
] 
} 

:だから、彼は戻ってそのように見えるJSONを私に送信されようとしています私のために。

import { Response } from "@angular/http"; 

export class ServerSource 
{ 
    SourceName: string; 
    MoreItems: boolean; 
    Error: string; 
    ExtendedProperties: ExtendedProperty[]; 
    Columns: Column[]; 
}  

export class ServerSourceResponse extends Response 
{ 



    JsonMinimal() : any 
    { 

     return null; //Something that will be a blank any type that when returned I can perform `object as FinalObject` syntax 
    } 


} 

私はStackOverflowの私はあくまで一例この例のデータを取り、活字体がために私に叫ぶするつもりはない動的応答を作成しているものを求めていますので、問題の完全なソリューションを求めてのためではありません知っています。私はここで何をすべきか分かりません。この開発者は何千ものサーバー側メソッドを持ち、それらのすべてがJSONまたはXML出力の形式で文字列を返します。私は基本的には、列のデータを取り出し、それを適切な行データと組み合わせて、これらの結合されたオブジェクトの束を保持する大きなオブジェクトを持つ方法を探しています。

この場合、データが基本オブジェクトにマッピングされた後の使用例は、このようなものになります。 例:

var data = result.JsonMinimal() as LoginResponse; <-- Which will map to this object correctly if all the data is there in a base object. 

var pk = data.ClientPK.Value; 
+0

なぜvar finalObject = Object.assign({}、rawObject); '?を実行していますか?また、 'LoginResponse'とは​​何ですか?私はあなたがここで事を複雑にしているかもしれないと思うが、あなたが達成したいことは私には明らかではない。 – Hinrich

+0

私は実際にコードを使って何かを始めたことはありませんでした。最初の考えでは役に立たなかったので、コード例から削除します。 –

+0

'JsonMinimal()'という名前の関数がJSONを返すのではなく、むしろオブジェクトを返すことに注意してください。 JSONは文字列形式です。 –

答えて

1

私は理解して正確にわからないんだけど、あなたは最初に単純なアプローチを試してみたいことがあります。 Angularのhttp getメソッドは、オブジェクトまたはオブジェクトの配列に応答を自動的にマップできるオブザーバブルを返します。カスタムマッピング/変換を実行するのにも十分強力です。最初にそれを見たいかもしれません。ここで

getProducts(): Observable<IProduct[]> { 
    return this._http.get(this._productUrl) 
     .map((response: Response) => <IProduct[]> response.json()) 
     .do(data => console.log('All: ' + JSON.stringify(data))) 
     .catch(this.handleError); 
} 

私はIProductインタフェースで定義した製品オブジェクトの配列にJSONレスポンスをマッピングしています:ここで

は一例です。これはちょうど "ラムダ"タイプの関数なので、データを変換するためにここに任意の量のコードを追加できます。