2017-06-19 1 views
0

Es gibt viele Methoden, um aus einer json-Antwort eine typescrpt-Klasse zu machen.Warum eine explizite Serialisierung von Json-Objekten?

in vielen Projekten habe ich es wie folgt aus:

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

Der Hauptvorteil ist, dass es einfach und sauber ist, aber es gibt keine Software, die automatisch eine C# -Klasse zu dieser umwandeln kann.

Dann habe ich gegraben und gefunden https://github.com/NSwag/NSwag/wiki/NSwagStudio dies kann C# Modelle Klassen in Typoskript konvertieren.

F: Warum sollte ich jeden JSON wie diesen Language.fromJS(requestJson) serialisieren?

Ich kann kein Risiko sehen, mit meiner alten Methode in Zukunft zu gehen.

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; 
    } 
} 

Antwort

1

Das Hauptproblem bei Ihrer ersten Option ist, dass Sie die Eigenschaften jedes Mal, wenn Sie eine Instanz wollen aus einer JSON Antwort zu geben haben:

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

Während bei Ihrer zweiten Option, die Sie abstrahieren kann die JSON -in-Instanz-Konvertierung an einem einzigen Ort - die fromJS Methode. Und mit der expliziten Methode toJSON können Sie die Struktur des Objekts steuern, wenn es serialisiert wird - dies kann hilfreich sein, wenn Sie die gleiche Eigenschaft in TypeScript und etwas anderes auf Ihrer Serverseite benötigen.

+0

nicht korrekt, ich muss nicht die Eigenschaften bereitstellen, die automatisch passiert – user3387996

+0

Wie geschieht das automatisch? Wie erstellen Sie eine Instanz mit Ihrer ersten Option? – Saravana

+0

oh warte, du hast recht ich erschaffe keine Instanz im fake casting it response.json(), ty – user3387996

Verwandte Themen