2017-06-19 63 views
0

有許多方法可以用json響應來創建typescrpt類。爲什麼要對Json對象進行爆炸序列化?

在很多項目我做了這樣的:

export class Group 
{ 
    constructor(
    public Id?: number, 
    public Name?: string, 
    public Users?: User[], 
    public Role?: Role, 
    public Customers: Customer[] = new Array()) 
    { 
    } 
} 

主要好處是,它是簡單幹淨,但沒有軟件,它可以一個C#類自動轉換到這一點。

然後我挖掘並找到https://github.com/NSwag/NSwag/wiki/NSwagStudio 這可以將c#models類轉換爲typescript。

問:我爲什麼要序列化每個JSON像這樣Language.fromJS(requestJson)

在未來,我看不出有任何風險與我的舊方法。

export class Language { 
    id: number; 
    flag?: string | null; 

    init(data?: any) { 
     if (data) { 
      this.id = data["Id"] !== undefined ? data["Id"] : <any>null; 
      this.flag = data["Flag"] !== undefined ? data["Flag"] : <any>null; 
     } 
    } 

    static fromJS(data: any): Language { 
     let result = new Language(); 
     result.init(data); 
     return result; 
    } 

    toJSON(data?: any) { 
     data = typeof data === 'object' ? data : {}; 
     data["Id"] = this.id !== undefined ? this.id : <any>null; 
     data["Flag"] = this.flag !== undefined ? this.flag : <any>null; 
     return data; 
    } 
} 

回答

1

你的第一個選項的主要問題是,你必須要從一個JSON響應的情況下,每次提供的屬性:

new Group(json.id, json.name, ...) 

而與你的第二個選項,你可以抽象的JSON在一個地方執行實例轉換 - fromJS方法。通過明確的toJSON方法,您可以在對象序列化時控制對象的結構 - 當您需要在TypeScript中命名相同的屬性以及服務器端的其他屬性時,這可能會有所幫助。

+0

不正確,我不必提供自動發生的屬性 – user3387996

+0

這是如何自動發生的?你如何用你的第一個選項創建一個實例? – Saravana

+0

哦,等待你是對的即時通訊沒有創建一個實例即時通訊假鑄造它 response.json(),ty – user3387996