Json TypeScript/Angular 2创建动态对象反序列化器
所以我来自C#的背景,在这里我可以用一种动态和反思的方式做事情,我试图将其应用到我正在编写的TypeScript类中。 在某些背景下,我正在将一个应用程序转换为一个web应用程序,而后端开发人员根本不想更改后端以很好地适应Json。所以他会把Json发回给我,看起来是这样的:Json TypeScript/Angular 2创建动态对象反序列化器,json,angular,typescript,Json,Angular,Typescript,所以我来自C#的背景,在这里我可以用一种动态和反思的方式做事情,我试图将其应用到我正在编写的TypeScript类中。 在某些背景下,我正在将一个应用程序转换为一个web应用程序,而后端开发人员根本不想更改后端以很好地适应Json。所以他会把Json发回给我,看起来是这样的: { Columns: [ { "ColumnName": "ClientPK", "Label": "Client", "DataType": "int", "Length": 0, "
{
Columns: [
{
"ColumnName": "ClientPK",
"Label": "Client",
"DataType": "int",
"Length": 0,
"AllowNull": true,
"Format": "",
"IsReadOnly": true,
"IsDateOnly": null
}
],
Rows:[
0
]
}
我希望编写一个Angular类来扩展响应,该类将有一个名为JsonMinimal的特殊方法,该方法将理解这些数据并为我返回一个对象
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并不是为了寻求问题的完整解决方案,所以我只想问一个例子是什么——以这个例子中的数据为例,创建一个TypeScript不会对我大喊大叫的动态响应。我不知道该怎么办,这个开发人员有数千个服务器端方法,所有这些方法都以JSON或XML输出的形式返回字符串。我基本上是在寻找一种方法来获取他的列数据,并将其与适当的行数据相结合,然后有一个更大的对象来保存这些组合的对象
在将数据映射到基本对象之后,这里的用例如下所示。
例如:
var data=result.JsonMinimal()作为LoginResponse 我不确定我是否理解,但您可能想先尝试一种简单的方法。Angular的http get方法返回一个observable,它可以自动将响应映射到一个对象或一组对象。它还足够强大,可以执行一些自定义映射/转换。你可以先看看这个
以下是一个例子:
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);
}
getProducts():可观察{
返回此。\ http.get(此。\产品URL)
.map((response:response)=>response.json())
.do(data=>console.log('All:'+JSON.stringify(data)))
.接住(这个.把手错误);
}
这里我将json响应映射到我用IPProduct接口定义的产品对象数组。因为这只是一个“lambda”类型的函数,所以我可以在这里添加任意数量的代码来转换数据。我不确定自己是否理解,但您可能想先尝试一种简单的方法。Angular的http get方法返回一个observable,它可以自动将响应映射到一个对象或一组对象。它还足够强大,可以执行一些自定义映射/转换。你可以先看看这个
以下是一个例子:
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);
}
getProducts():可观察{
返回此。\ http.get(此。\产品URL)
.map((response:response)=>response.json())
.do(data=>console.log('All:'+JSON.stringify(data)))
.接住(这个.把手错误);
}
这里我将json响应映射到我用IPProduct接口定义的产品对象数组。由于这只是一个“lambda”类型的函数,我可以在这里添加任意数量的代码来转换数据。为什么要执行var finalObject=Object.assign({},rawObject)代码>?。另外,什么是LoginResponse
?我认为您可能在这里过于复杂化了,但我不太清楚您想要实现什么。我还没有真正开始使用最初认为有用的代码。我将从代码示例中删除它。请注意,名为JsonMinimal()
的函数不是返回JSON,而是返回一个对象。JSON是一种字符串格式。为什么要执行var finalObject=Object.assign({},rawObject)代码>?。另外,什么是LoginResponse
?我认为您可能在这里过于复杂化了,但我不太清楚您想要实现什么。我还没有真正开始使用最初认为有用的代码。我将从代码示例中删除它。请注意,名为JsonMinimal()
的函数不是返回JSON,而是返回一个对象。JSON是一种字符串格式。