簡體   English   中英

JSON轉換為Angular中的TypeScript

[英]JSON to TypeScript in Angular

我在angular中有一個http服務,該服務可以調用Web api以獲取需要反序列化為Typescript(.ts)對象的JSON數據。 JSON中的鍵名(即“屬性”)與打字稿中的鍵名(即“屬性”)不匹配-表示JSON數據為大寫,打字稿為小寫。 是否有一個帶有http調用的映射函數,可以在其中將json反序列化為打字稿?

從Web API返回的示例JSON

"Packages": [
      {
          "IsESignAllowed": false,
          "IsEnabled": true,
          "Name": "Brokerage Accounts Package",
          "PackageId": 2
      }
]

Angular上的相關.ts文件

export class Package {
    public isESignAllowed: boolean;
    public isEnabled: boolean;
    public name: string;
    public packageId: number;
}

您可以在Typescript中向Package類添加一些序列化函數,這將使您可以將JSON對象從服務器映射到TS中的新Package對象。

如前所述,最好在任何地方都保留標准的駝峰式約定-並讓服務器發送帶有小寫字母屬性名稱的JSON,但是,如果不可能,仍可以在序列化函數中處理。

export class Package {
    public isESignAllowed: boolean;
    public isEnabled: boolean;
    public name: string;
    public packageId: number;

    static fromJson(jsonObj: any) {
        const newPackage = new this();
        newPackage.isESignAllowed = jsonObj.IsESignAllowed;
        newPackage.isEnabled = jsonObj.IsEnabled;
        newPackage.name = jsonObj.Name;
        newPackage.packageId = jsonObj.PackageId;
        return newPackage;
    }

    public toJson(): any {
        const jsonObj: any = {};
        jsonObj.IsESignAllowed = this.isESignAllowed;
        jsonObj.IsEnabled = this.isEnabled;
        jsonObj.Name = this.name;
        jsonObj.PackageId = this.packageId;
        return jsonObj;
    }
}

從服務器接收到JSON之后,現在就可以將包數組映射到新的Package.fromJson()函數上,以創建Package對象列表。

const packages = serverResponse.Packages.map(packageJson => Package.fromJson(packageJson));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM